1package network
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"encoding/json"
23	"github.com/Azure/go-autorest/autorest"
24	"github.com/Azure/go-autorest/autorest/azure"
25	"github.com/Azure/go-autorest/autorest/date"
26	"github.com/Azure/go-autorest/autorest/to"
27	"github.com/Azure/go-autorest/tracing"
28	"net/http"
29)
30
31// The package's fully qualified name.
32const fqdn = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-05-01/network"
33
34// Access enumerates the values for access.
35type Access string
36
37const (
38	// Allow ...
39	Allow Access = "Allow"
40	// Deny ...
41	Deny Access = "Deny"
42)
43
44// PossibleAccessValues returns an array of possible values for the Access const type.
45func PossibleAccessValues() []Access {
46	return []Access{Allow, Deny}
47}
48
49// ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health
50// server health.
51type ApplicationGatewayBackendHealthServerHealth string
52
53const (
54	// Down ...
55	Down ApplicationGatewayBackendHealthServerHealth = "Down"
56	// Draining ...
57	Draining ApplicationGatewayBackendHealthServerHealth = "Draining"
58	// Partial ...
59	Partial ApplicationGatewayBackendHealthServerHealth = "Partial"
60	// Unknown ...
61	Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown"
62	// Up ...
63	Up ApplicationGatewayBackendHealthServerHealth = "Up"
64)
65
66// PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type.
67func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth {
68	return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up}
69}
70
71// ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity.
72type ApplicationGatewayCookieBasedAffinity string
73
74const (
75	// Disabled ...
76	Disabled ApplicationGatewayCookieBasedAffinity = "Disabled"
77	// Enabled ...
78	Enabled ApplicationGatewayCookieBasedAffinity = "Enabled"
79)
80
81// PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type.
82func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity {
83	return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled}
84}
85
86// ApplicationGatewayCustomErrorStatusCode enumerates the values for application gateway custom error status
87// code.
88type ApplicationGatewayCustomErrorStatusCode string
89
90const (
91	// HTTPStatus403 ...
92	HTTPStatus403 ApplicationGatewayCustomErrorStatusCode = "HttpStatus403"
93	// HTTPStatus502 ...
94	HTTPStatus502 ApplicationGatewayCustomErrorStatusCode = "HttpStatus502"
95)
96
97// PossibleApplicationGatewayCustomErrorStatusCodeValues returns an array of possible values for the ApplicationGatewayCustomErrorStatusCode const type.
98func PossibleApplicationGatewayCustomErrorStatusCodeValues() []ApplicationGatewayCustomErrorStatusCode {
99	return []ApplicationGatewayCustomErrorStatusCode{HTTPStatus403, HTTPStatus502}
100}
101
102// ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode.
103type ApplicationGatewayFirewallMode string
104
105const (
106	// Detection ...
107	Detection ApplicationGatewayFirewallMode = "Detection"
108	// Prevention ...
109	Prevention ApplicationGatewayFirewallMode = "Prevention"
110)
111
112// PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type.
113func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode {
114	return []ApplicationGatewayFirewallMode{Detection, Prevention}
115}
116
117// ApplicationGatewayOperationalState enumerates the values for application gateway operational state.
118type ApplicationGatewayOperationalState string
119
120const (
121	// Running ...
122	Running ApplicationGatewayOperationalState = "Running"
123	// Starting ...
124	Starting ApplicationGatewayOperationalState = "Starting"
125	// Stopped ...
126	Stopped ApplicationGatewayOperationalState = "Stopped"
127	// Stopping ...
128	Stopping ApplicationGatewayOperationalState = "Stopping"
129)
130
131// PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type.
132func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState {
133	return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping}
134}
135
136// ApplicationGatewayProtocol enumerates the values for application gateway protocol.
137type ApplicationGatewayProtocol string
138
139const (
140	// HTTP ...
141	HTTP ApplicationGatewayProtocol = "Http"
142	// HTTPS ...
143	HTTPS ApplicationGatewayProtocol = "Https"
144)
145
146// PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type.
147func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol {
148	return []ApplicationGatewayProtocol{HTTP, HTTPS}
149}
150
151// ApplicationGatewayRedirectType enumerates the values for application gateway redirect type.
152type ApplicationGatewayRedirectType string
153
154const (
155	// Found ...
156	Found ApplicationGatewayRedirectType = "Found"
157	// Permanent ...
158	Permanent ApplicationGatewayRedirectType = "Permanent"
159	// SeeOther ...
160	SeeOther ApplicationGatewayRedirectType = "SeeOther"
161	// Temporary ...
162	Temporary ApplicationGatewayRedirectType = "Temporary"
163)
164
165// PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type.
166func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType {
167	return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary}
168}
169
170// ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule
171// type.
172type ApplicationGatewayRequestRoutingRuleType string
173
174const (
175	// Basic ...
176	Basic ApplicationGatewayRequestRoutingRuleType = "Basic"
177	// PathBasedRouting ...
178	PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting"
179)
180
181// PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type.
182func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType {
183	return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting}
184}
185
186// ApplicationGatewaySkuName enumerates the values for application gateway sku name.
187type ApplicationGatewaySkuName string
188
189const (
190	// StandardLarge ...
191	StandardLarge ApplicationGatewaySkuName = "Standard_Large"
192	// StandardMedium ...
193	StandardMedium ApplicationGatewaySkuName = "Standard_Medium"
194	// StandardSmall ...
195	StandardSmall ApplicationGatewaySkuName = "Standard_Small"
196	// StandardV2 ...
197	StandardV2 ApplicationGatewaySkuName = "Standard_v2"
198	// WAFLarge ...
199	WAFLarge ApplicationGatewaySkuName = "WAF_Large"
200	// WAFMedium ...
201	WAFMedium ApplicationGatewaySkuName = "WAF_Medium"
202	// WAFV2 ...
203	WAFV2 ApplicationGatewaySkuName = "WAF_v2"
204)
205
206// PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type.
207func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName {
208	return []ApplicationGatewaySkuName{StandardLarge, StandardMedium, StandardSmall, StandardV2, WAFLarge, WAFMedium, WAFV2}
209}
210
211// ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite.
212type ApplicationGatewaySslCipherSuite string
213
214const (
215	// TLSDHEDSSWITH3DESEDECBCSHA ...
216	TLSDHEDSSWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
217	// TLSDHEDSSWITHAES128CBCSHA ...
218	TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
219	// TLSDHEDSSWITHAES128CBCSHA256 ...
220	TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
221	// TLSDHEDSSWITHAES256CBCSHA ...
222	TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
223	// TLSDHEDSSWITHAES256CBCSHA256 ...
224	TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
225	// TLSDHERSAWITHAES128CBCSHA ...
226	TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
227	// TLSDHERSAWITHAES128GCMSHA256 ...
228	TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
229	// TLSDHERSAWITHAES256CBCSHA ...
230	TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
231	// TLSDHERSAWITHAES256GCMSHA384 ...
232	TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"
233	// TLSECDHEECDSAWITHAES128CBCSHA ...
234	TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
235	// TLSECDHEECDSAWITHAES128CBCSHA256 ...
236	TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
237	// TLSECDHEECDSAWITHAES128GCMSHA256 ...
238	TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
239	// TLSECDHEECDSAWITHAES256CBCSHA ...
240	TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
241	// TLSECDHEECDSAWITHAES256CBCSHA384 ...
242	TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
243	// TLSECDHEECDSAWITHAES256GCMSHA384 ...
244	TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
245	// TLSECDHERSAWITHAES128CBCSHA ...
246	TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
247	// TLSECDHERSAWITHAES128CBCSHA256 ...
248	TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
249	// TLSECDHERSAWITHAES128GCMSHA256 ...
250	TLSECDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
251	// TLSECDHERSAWITHAES256CBCSHA ...
252	TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
253	// TLSECDHERSAWITHAES256CBCSHA384 ...
254	TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
255	// TLSECDHERSAWITHAES256GCMSHA384 ...
256	TLSECDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
257	// TLSRSAWITH3DESEDECBCSHA ...
258	TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
259	// TLSRSAWITHAES128CBCSHA ...
260	TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA"
261	// TLSRSAWITHAES128CBCSHA256 ...
262	TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256"
263	// TLSRSAWITHAES128GCMSHA256 ...
264	TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256"
265	// TLSRSAWITHAES256CBCSHA ...
266	TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA"
267	// TLSRSAWITHAES256CBCSHA256 ...
268	TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256"
269	// TLSRSAWITHAES256GCMSHA384 ...
270	TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"
271)
272
273// PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type.
274func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite {
275	return []ApplicationGatewaySslCipherSuite{TLSDHEDSSWITH3DESEDECBCSHA, TLSDHEDSSWITHAES128CBCSHA, TLSDHEDSSWITHAES128CBCSHA256, TLSDHEDSSWITHAES256CBCSHA, TLSDHEDSSWITHAES256CBCSHA256, TLSDHERSAWITHAES128CBCSHA, TLSDHERSAWITHAES128GCMSHA256, TLSDHERSAWITHAES256CBCSHA, TLSDHERSAWITHAES256GCMSHA384, TLSECDHEECDSAWITHAES128CBCSHA, TLSECDHEECDSAWITHAES128CBCSHA256, TLSECDHEECDSAWITHAES128GCMSHA256, TLSECDHEECDSAWITHAES256CBCSHA, TLSECDHEECDSAWITHAES256CBCSHA384, TLSECDHEECDSAWITHAES256GCMSHA384, TLSECDHERSAWITHAES128CBCSHA, TLSECDHERSAWITHAES128CBCSHA256, TLSECDHERSAWITHAES128GCMSHA256, TLSECDHERSAWITHAES256CBCSHA, TLSECDHERSAWITHAES256CBCSHA384, TLSECDHERSAWITHAES256GCMSHA384, TLSRSAWITH3DESEDECBCSHA, TLSRSAWITHAES128CBCSHA, TLSRSAWITHAES128CBCSHA256, TLSRSAWITHAES128GCMSHA256, TLSRSAWITHAES256CBCSHA, TLSRSAWITHAES256CBCSHA256, TLSRSAWITHAES256GCMSHA384}
276}
277
278// ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name.
279type ApplicationGatewaySslPolicyName string
280
281const (
282	// AppGwSslPolicy20150501 ...
283	AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501"
284	// AppGwSslPolicy20170401 ...
285	AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401"
286	// AppGwSslPolicy20170401S ...
287	AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S"
288)
289
290// PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type.
291func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName {
292	return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S}
293}
294
295// ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type.
296type ApplicationGatewaySslPolicyType string
297
298const (
299	// Custom ...
300	Custom ApplicationGatewaySslPolicyType = "Custom"
301	// Predefined ...
302	Predefined ApplicationGatewaySslPolicyType = "Predefined"
303)
304
305// PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type.
306func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType {
307	return []ApplicationGatewaySslPolicyType{Custom, Predefined}
308}
309
310// ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol.
311type ApplicationGatewaySslProtocol string
312
313const (
314	// TLSv10 ...
315	TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0"
316	// TLSv11 ...
317	TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1"
318	// TLSv12 ...
319	TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2"
320)
321
322// PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type.
323func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol {
324	return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12}
325}
326
327// ApplicationGatewayTier enumerates the values for application gateway tier.
328type ApplicationGatewayTier string
329
330const (
331	// ApplicationGatewayTierStandard ...
332	ApplicationGatewayTierStandard ApplicationGatewayTier = "Standard"
333	// ApplicationGatewayTierStandardV2 ...
334	ApplicationGatewayTierStandardV2 ApplicationGatewayTier = "Standard_v2"
335	// ApplicationGatewayTierWAF ...
336	ApplicationGatewayTierWAF ApplicationGatewayTier = "WAF"
337	// ApplicationGatewayTierWAFV2 ...
338	ApplicationGatewayTierWAFV2 ApplicationGatewayTier = "WAF_v2"
339)
340
341// PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type.
342func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier {
343	return []ApplicationGatewayTier{ApplicationGatewayTierStandard, ApplicationGatewayTierStandardV2, ApplicationGatewayTierWAF, ApplicationGatewayTierWAFV2}
344}
345
346// AssociationType enumerates the values for association type.
347type AssociationType string
348
349const (
350	// Associated ...
351	Associated AssociationType = "Associated"
352	// Contains ...
353	Contains AssociationType = "Contains"
354)
355
356// PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type.
357func PossibleAssociationTypeValues() []AssociationType {
358	return []AssociationType{Associated, Contains}
359}
360
361// AuthenticationMethod enumerates the values for authentication method.
362type AuthenticationMethod string
363
364const (
365	// EAPMSCHAPv2 ...
366	EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2"
367	// EAPTLS ...
368	EAPTLS AuthenticationMethod = "EAPTLS"
369)
370
371// PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type.
372func PossibleAuthenticationMethodValues() []AuthenticationMethod {
373	return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS}
374}
375
376// AuthorizationUseStatus enumerates the values for authorization use status.
377type AuthorizationUseStatus string
378
379const (
380	// Available ...
381	Available AuthorizationUseStatus = "Available"
382	// InUse ...
383	InUse AuthorizationUseStatus = "InUse"
384)
385
386// PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type.
387func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus {
388	return []AuthorizationUseStatus{Available, InUse}
389}
390
391// AzureFirewallApplicationRuleProtocolType enumerates the values for azure firewall application rule protocol
392// type.
393type AzureFirewallApplicationRuleProtocolType string
394
395const (
396	// AzureFirewallApplicationRuleProtocolTypeHTTP ...
397	AzureFirewallApplicationRuleProtocolTypeHTTP AzureFirewallApplicationRuleProtocolType = "Http"
398	// AzureFirewallApplicationRuleProtocolTypeHTTPS ...
399	AzureFirewallApplicationRuleProtocolTypeHTTPS AzureFirewallApplicationRuleProtocolType = "Https"
400	// AzureFirewallApplicationRuleProtocolTypeMssql ...
401	AzureFirewallApplicationRuleProtocolTypeMssql AzureFirewallApplicationRuleProtocolType = "Mssql"
402)
403
404// PossibleAzureFirewallApplicationRuleProtocolTypeValues returns an array of possible values for the AzureFirewallApplicationRuleProtocolType const type.
405func PossibleAzureFirewallApplicationRuleProtocolTypeValues() []AzureFirewallApplicationRuleProtocolType {
406	return []AzureFirewallApplicationRuleProtocolType{AzureFirewallApplicationRuleProtocolTypeHTTP, AzureFirewallApplicationRuleProtocolTypeHTTPS, AzureFirewallApplicationRuleProtocolTypeMssql}
407}
408
409// AzureFirewallNatRCActionType enumerates the values for azure firewall nat rc action type.
410type AzureFirewallNatRCActionType string
411
412const (
413	// Dnat ...
414	Dnat AzureFirewallNatRCActionType = "Dnat"
415	// Snat ...
416	Snat AzureFirewallNatRCActionType = "Snat"
417)
418
419// PossibleAzureFirewallNatRCActionTypeValues returns an array of possible values for the AzureFirewallNatRCActionType const type.
420func PossibleAzureFirewallNatRCActionTypeValues() []AzureFirewallNatRCActionType {
421	return []AzureFirewallNatRCActionType{Dnat, Snat}
422}
423
424// AzureFirewallNetworkRuleProtocol enumerates the values for azure firewall network rule protocol.
425type AzureFirewallNetworkRuleProtocol string
426
427const (
428	// Any ...
429	Any AzureFirewallNetworkRuleProtocol = "Any"
430	// ICMP ...
431	ICMP AzureFirewallNetworkRuleProtocol = "ICMP"
432	// TCP ...
433	TCP AzureFirewallNetworkRuleProtocol = "TCP"
434	// UDP ...
435	UDP AzureFirewallNetworkRuleProtocol = "UDP"
436)
437
438// PossibleAzureFirewallNetworkRuleProtocolValues returns an array of possible values for the AzureFirewallNetworkRuleProtocol const type.
439func PossibleAzureFirewallNetworkRuleProtocolValues() []AzureFirewallNetworkRuleProtocol {
440	return []AzureFirewallNetworkRuleProtocol{Any, ICMP, TCP, UDP}
441}
442
443// AzureFirewallRCActionType enumerates the values for azure firewall rc action type.
444type AzureFirewallRCActionType string
445
446const (
447	// AzureFirewallRCActionTypeAllow ...
448	AzureFirewallRCActionTypeAllow AzureFirewallRCActionType = "Allow"
449	// AzureFirewallRCActionTypeDeny ...
450	AzureFirewallRCActionTypeDeny AzureFirewallRCActionType = "Deny"
451)
452
453// PossibleAzureFirewallRCActionTypeValues returns an array of possible values for the AzureFirewallRCActionType const type.
454func PossibleAzureFirewallRCActionTypeValues() []AzureFirewallRCActionType {
455	return []AzureFirewallRCActionType{AzureFirewallRCActionTypeAllow, AzureFirewallRCActionTypeDeny}
456}
457
458// AzureFirewallSkuName enumerates the values for azure firewall sku name.
459type AzureFirewallSkuName string
460
461const (
462	// AZFWHub ...
463	AZFWHub AzureFirewallSkuName = "AZFW_Hub"
464	// AZFWVNet ...
465	AZFWVNet AzureFirewallSkuName = "AZFW_VNet"
466)
467
468// PossibleAzureFirewallSkuNameValues returns an array of possible values for the AzureFirewallSkuName const type.
469func PossibleAzureFirewallSkuNameValues() []AzureFirewallSkuName {
470	return []AzureFirewallSkuName{AZFWHub, AZFWVNet}
471}
472
473// AzureFirewallSkuTier enumerates the values for azure firewall sku tier.
474type AzureFirewallSkuTier string
475
476const (
477	// Premium ...
478	Premium AzureFirewallSkuTier = "Premium"
479	// Standard ...
480	Standard AzureFirewallSkuTier = "Standard"
481)
482
483// PossibleAzureFirewallSkuTierValues returns an array of possible values for the AzureFirewallSkuTier const type.
484func PossibleAzureFirewallSkuTierValues() []AzureFirewallSkuTier {
485	return []AzureFirewallSkuTier{Premium, Standard}
486}
487
488// AzureFirewallThreatIntelMode enumerates the values for azure firewall threat intel mode.
489type AzureFirewallThreatIntelMode string
490
491const (
492	// AzureFirewallThreatIntelModeAlert ...
493	AzureFirewallThreatIntelModeAlert AzureFirewallThreatIntelMode = "Alert"
494	// AzureFirewallThreatIntelModeDeny ...
495	AzureFirewallThreatIntelModeDeny AzureFirewallThreatIntelMode = "Deny"
496	// AzureFirewallThreatIntelModeOff ...
497	AzureFirewallThreatIntelModeOff AzureFirewallThreatIntelMode = "Off"
498)
499
500// PossibleAzureFirewallThreatIntelModeValues returns an array of possible values for the AzureFirewallThreatIntelMode const type.
501func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode {
502	return []AzureFirewallThreatIntelMode{AzureFirewallThreatIntelModeAlert, AzureFirewallThreatIntelModeDeny, AzureFirewallThreatIntelModeOff}
503}
504
505// BastionConnectProtocol enumerates the values for bastion connect protocol.
506type BastionConnectProtocol string
507
508const (
509	// RDP ...
510	RDP BastionConnectProtocol = "RDP"
511	// SSH ...
512	SSH BastionConnectProtocol = "SSH"
513)
514
515// PossibleBastionConnectProtocolValues returns an array of possible values for the BastionConnectProtocol const type.
516func PossibleBastionConnectProtocolValues() []BastionConnectProtocol {
517	return []BastionConnectProtocol{RDP, SSH}
518}
519
520// BgpPeerState enumerates the values for bgp peer state.
521type BgpPeerState string
522
523const (
524	// BgpPeerStateConnected ...
525	BgpPeerStateConnected BgpPeerState = "Connected"
526	// BgpPeerStateConnecting ...
527	BgpPeerStateConnecting BgpPeerState = "Connecting"
528	// BgpPeerStateIdle ...
529	BgpPeerStateIdle BgpPeerState = "Idle"
530	// BgpPeerStateStopped ...
531	BgpPeerStateStopped BgpPeerState = "Stopped"
532	// BgpPeerStateUnknown ...
533	BgpPeerStateUnknown BgpPeerState = "Unknown"
534)
535
536// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
537func PossibleBgpPeerStateValues() []BgpPeerState {
538	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
539}
540
541// CircuitConnectionStatus enumerates the values for circuit connection status.
542type CircuitConnectionStatus string
543
544const (
545	// Connected ...
546	Connected CircuitConnectionStatus = "Connected"
547	// Connecting ...
548	Connecting CircuitConnectionStatus = "Connecting"
549	// Disconnected ...
550	Disconnected CircuitConnectionStatus = "Disconnected"
551)
552
553// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
554func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
555	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
556}
557
558// ConnectionMonitorEndpointFilterItemType enumerates the values for connection monitor endpoint filter item
559// type.
560type ConnectionMonitorEndpointFilterItemType string
561
562const (
563	// AgentAddress ...
564	AgentAddress ConnectionMonitorEndpointFilterItemType = "AgentAddress"
565)
566
567// PossibleConnectionMonitorEndpointFilterItemTypeValues returns an array of possible values for the ConnectionMonitorEndpointFilterItemType const type.
568func PossibleConnectionMonitorEndpointFilterItemTypeValues() []ConnectionMonitorEndpointFilterItemType {
569	return []ConnectionMonitorEndpointFilterItemType{AgentAddress}
570}
571
572// ConnectionMonitorEndpointFilterType enumerates the values for connection monitor endpoint filter type.
573type ConnectionMonitorEndpointFilterType string
574
575const (
576	// Include ...
577	Include ConnectionMonitorEndpointFilterType = "Include"
578)
579
580// PossibleConnectionMonitorEndpointFilterTypeValues returns an array of possible values for the ConnectionMonitorEndpointFilterType const type.
581func PossibleConnectionMonitorEndpointFilterTypeValues() []ConnectionMonitorEndpointFilterType {
582	return []ConnectionMonitorEndpointFilterType{Include}
583}
584
585// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
586type ConnectionMonitorSourceStatus string
587
588const (
589	// ConnectionMonitorSourceStatusActive ...
590	ConnectionMonitorSourceStatusActive ConnectionMonitorSourceStatus = "Active"
591	// ConnectionMonitorSourceStatusInactive ...
592	ConnectionMonitorSourceStatusInactive ConnectionMonitorSourceStatus = "Inactive"
593	// ConnectionMonitorSourceStatusUnknown ...
594	ConnectionMonitorSourceStatusUnknown ConnectionMonitorSourceStatus = "Unknown"
595)
596
597// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
598func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
599	return []ConnectionMonitorSourceStatus{ConnectionMonitorSourceStatusActive, ConnectionMonitorSourceStatusInactive, ConnectionMonitorSourceStatusUnknown}
600}
601
602// ConnectionMonitorTestConfigurationProtocol enumerates the values for connection monitor test configuration
603// protocol.
604type ConnectionMonitorTestConfigurationProtocol string
605
606const (
607	// ConnectionMonitorTestConfigurationProtocolHTTP ...
608	ConnectionMonitorTestConfigurationProtocolHTTP ConnectionMonitorTestConfigurationProtocol = "Http"
609	// ConnectionMonitorTestConfigurationProtocolIcmp ...
610	ConnectionMonitorTestConfigurationProtocolIcmp ConnectionMonitorTestConfigurationProtocol = "Icmp"
611	// ConnectionMonitorTestConfigurationProtocolTCP ...
612	ConnectionMonitorTestConfigurationProtocolTCP ConnectionMonitorTestConfigurationProtocol = "Tcp"
613)
614
615// PossibleConnectionMonitorTestConfigurationProtocolValues returns an array of possible values for the ConnectionMonitorTestConfigurationProtocol const type.
616func PossibleConnectionMonitorTestConfigurationProtocolValues() []ConnectionMonitorTestConfigurationProtocol {
617	return []ConnectionMonitorTestConfigurationProtocol{ConnectionMonitorTestConfigurationProtocolHTTP, ConnectionMonitorTestConfigurationProtocolIcmp, ConnectionMonitorTestConfigurationProtocolTCP}
618}
619
620// ConnectionMonitorType enumerates the values for connection monitor type.
621type ConnectionMonitorType string
622
623const (
624	// MultiEndpoint ...
625	MultiEndpoint ConnectionMonitorType = "MultiEndpoint"
626	// SingleSourceDestination ...
627	SingleSourceDestination ConnectionMonitorType = "SingleSourceDestination"
628)
629
630// PossibleConnectionMonitorTypeValues returns an array of possible values for the ConnectionMonitorType const type.
631func PossibleConnectionMonitorTypeValues() []ConnectionMonitorType {
632	return []ConnectionMonitorType{MultiEndpoint, SingleSourceDestination}
633}
634
635// ConnectionState enumerates the values for connection state.
636type ConnectionState string
637
638const (
639	// ConnectionStateReachable ...
640	ConnectionStateReachable ConnectionState = "Reachable"
641	// ConnectionStateUnknown ...
642	ConnectionStateUnknown ConnectionState = "Unknown"
643	// ConnectionStateUnreachable ...
644	ConnectionStateUnreachable ConnectionState = "Unreachable"
645)
646
647// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
648func PossibleConnectionStateValues() []ConnectionState {
649	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
650}
651
652// ConnectionStatus enumerates the values for connection status.
653type ConnectionStatus string
654
655const (
656	// ConnectionStatusConnected ...
657	ConnectionStatusConnected ConnectionStatus = "Connected"
658	// ConnectionStatusDegraded ...
659	ConnectionStatusDegraded ConnectionStatus = "Degraded"
660	// ConnectionStatusDisconnected ...
661	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
662	// ConnectionStatusUnknown ...
663	ConnectionStatusUnknown ConnectionStatus = "Unknown"
664)
665
666// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
667func PossibleConnectionStatusValues() []ConnectionStatus {
668	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
669}
670
671// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol.
672type DdosCustomPolicyProtocol string
673
674const (
675	// DdosCustomPolicyProtocolSyn ...
676	DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn"
677	// DdosCustomPolicyProtocolTCP ...
678	DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp"
679	// DdosCustomPolicyProtocolUDP ...
680	DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp"
681)
682
683// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type.
684func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol {
685	return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP}
686}
687
688// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity
689// override.
690type DdosCustomPolicyTriggerSensitivityOverride string
691
692const (
693	// Default ...
694	Default DdosCustomPolicyTriggerSensitivityOverride = "Default"
695	// High ...
696	High DdosCustomPolicyTriggerSensitivityOverride = "High"
697	// Low ...
698	Low DdosCustomPolicyTriggerSensitivityOverride = "Low"
699	// Relaxed ...
700	Relaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed"
701)
702
703// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type.
704func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride {
705	return []DdosCustomPolicyTriggerSensitivityOverride{Default, High, Low, Relaxed}
706}
707
708// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage.
709type DdosSettingsProtectionCoverage string
710
711const (
712	// DdosSettingsProtectionCoverageBasic ...
713	DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic"
714	// DdosSettingsProtectionCoverageStandard ...
715	DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard"
716)
717
718// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type.
719func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage {
720	return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard}
721}
722
723// DhGroup enumerates the values for dh group.
724type DhGroup string
725
726const (
727	// DHGroup1 ...
728	DHGroup1 DhGroup = "DHGroup1"
729	// DHGroup14 ...
730	DHGroup14 DhGroup = "DHGroup14"
731	// DHGroup2 ...
732	DHGroup2 DhGroup = "DHGroup2"
733	// DHGroup2048 ...
734	DHGroup2048 DhGroup = "DHGroup2048"
735	// DHGroup24 ...
736	DHGroup24 DhGroup = "DHGroup24"
737	// ECP256 ...
738	ECP256 DhGroup = "ECP256"
739	// ECP384 ...
740	ECP384 DhGroup = "ECP384"
741	// None ...
742	None DhGroup = "None"
743)
744
745// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
746func PossibleDhGroupValues() []DhGroup {
747	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
748}
749
750// Direction enumerates the values for direction.
751type Direction string
752
753const (
754	// Inbound ...
755	Inbound Direction = "Inbound"
756	// Outbound ...
757	Outbound Direction = "Outbound"
758)
759
760// PossibleDirectionValues returns an array of possible values for the Direction const type.
761func PossibleDirectionValues() []Direction {
762	return []Direction{Inbound, Outbound}
763}
764
765// EffectiveRouteSource enumerates the values for effective route source.
766type EffectiveRouteSource string
767
768const (
769	// EffectiveRouteSourceDefault ...
770	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
771	// EffectiveRouteSourceUnknown ...
772	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
773	// EffectiveRouteSourceUser ...
774	EffectiveRouteSourceUser EffectiveRouteSource = "User"
775	// EffectiveRouteSourceVirtualNetworkGateway ...
776	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
777)
778
779// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
780func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
781	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
782}
783
784// EffectiveRouteState enumerates the values for effective route state.
785type EffectiveRouteState string
786
787const (
788	// Active ...
789	Active EffectiveRouteState = "Active"
790	// Invalid ...
791	Invalid EffectiveRouteState = "Invalid"
792)
793
794// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
795func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
796	return []EffectiveRouteState{Active, Invalid}
797}
798
799// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
800type EffectiveSecurityRuleProtocol string
801
802const (
803	// EffectiveSecurityRuleProtocolAll ...
804	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
805	// EffectiveSecurityRuleProtocolTCP ...
806	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
807	// EffectiveSecurityRuleProtocolUDP ...
808	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
809)
810
811// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
812func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
813	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
814}
815
816// EvaluationState enumerates the values for evaluation state.
817type EvaluationState string
818
819const (
820	// Completed ...
821	Completed EvaluationState = "Completed"
822	// InProgress ...
823	InProgress EvaluationState = "InProgress"
824	// NotStarted ...
825	NotStarted EvaluationState = "NotStarted"
826)
827
828// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
829func PossibleEvaluationStateValues() []EvaluationState {
830	return []EvaluationState{Completed, InProgress, NotStarted}
831}
832
833// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
834// peering advertised public prefix state.
835type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
836
837const (
838	// Configured ...
839	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
840	// Configuring ...
841	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
842	// NotConfigured ...
843	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
844	// ValidationNeeded ...
845	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
846)
847
848// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
849func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
850	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
851}
852
853// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
854type ExpressRouteCircuitPeeringState string
855
856const (
857	// ExpressRouteCircuitPeeringStateDisabled ...
858	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
859	// ExpressRouteCircuitPeeringStateEnabled ...
860	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
861)
862
863// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
864func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
865	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
866}
867
868// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
869type ExpressRouteCircuitSkuFamily string
870
871const (
872	// MeteredData ...
873	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
874	// UnlimitedData ...
875	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
876)
877
878// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
879func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
880	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
881}
882
883// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
884type ExpressRouteCircuitSkuTier string
885
886const (
887	// ExpressRouteCircuitSkuTierBasic ...
888	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
889	// ExpressRouteCircuitSkuTierLocal ...
890	ExpressRouteCircuitSkuTierLocal ExpressRouteCircuitSkuTier = "Local"
891	// ExpressRouteCircuitSkuTierPremium ...
892	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
893	// ExpressRouteCircuitSkuTierStandard ...
894	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
895)
896
897// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
898func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
899	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierLocal, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
900}
901
902// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
903type ExpressRouteLinkAdminState string
904
905const (
906	// ExpressRouteLinkAdminStateDisabled ...
907	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
908	// ExpressRouteLinkAdminStateEnabled ...
909	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
910)
911
912// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
913func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
914	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
915}
916
917// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
918type ExpressRouteLinkConnectorType string
919
920const (
921	// LC ...
922	LC ExpressRouteLinkConnectorType = "LC"
923	// SC ...
924	SC ExpressRouteLinkConnectorType = "SC"
925)
926
927// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
928func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
929	return []ExpressRouteLinkConnectorType{LC, SC}
930}
931
932// ExpressRouteLinkMacSecCipher enumerates the values for express route link mac sec cipher.
933type ExpressRouteLinkMacSecCipher string
934
935const (
936	// GcmAes128 ...
937	GcmAes128 ExpressRouteLinkMacSecCipher = "gcm-aes-128"
938	// GcmAes256 ...
939	GcmAes256 ExpressRouteLinkMacSecCipher = "gcm-aes-256"
940)
941
942// PossibleExpressRouteLinkMacSecCipherValues returns an array of possible values for the ExpressRouteLinkMacSecCipher const type.
943func PossibleExpressRouteLinkMacSecCipherValues() []ExpressRouteLinkMacSecCipher {
944	return []ExpressRouteLinkMacSecCipher{GcmAes128, GcmAes256}
945}
946
947// ExpressRoutePeeringState enumerates the values for express route peering state.
948type ExpressRoutePeeringState string
949
950const (
951	// ExpressRoutePeeringStateDisabled ...
952	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
953	// ExpressRoutePeeringStateEnabled ...
954	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
955)
956
957// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
958func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
959	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
960}
961
962// ExpressRoutePeeringType enumerates the values for express route peering type.
963type ExpressRoutePeeringType string
964
965const (
966	// AzurePrivatePeering ...
967	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
968	// AzurePublicPeering ...
969	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
970	// MicrosoftPeering ...
971	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
972)
973
974// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
975func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
976	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
977}
978
979// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
980type ExpressRoutePortsEncapsulation string
981
982const (
983	// Dot1Q ...
984	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
985	// QinQ ...
986	QinQ ExpressRoutePortsEncapsulation = "QinQ"
987)
988
989// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
990func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
991	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
992}
993
994// FirewallPolicyFilterRuleCollectionActionType enumerates the values for firewall policy filter rule
995// collection action type.
996type FirewallPolicyFilterRuleCollectionActionType string
997
998const (
999	// FirewallPolicyFilterRuleCollectionActionTypeAllow ...
1000	FirewallPolicyFilterRuleCollectionActionTypeAllow FirewallPolicyFilterRuleCollectionActionType = "Allow"
1001	// FirewallPolicyFilterRuleCollectionActionTypeDeny ...
1002	FirewallPolicyFilterRuleCollectionActionTypeDeny FirewallPolicyFilterRuleCollectionActionType = "Deny"
1003)
1004
1005// PossibleFirewallPolicyFilterRuleCollectionActionTypeValues returns an array of possible values for the FirewallPolicyFilterRuleCollectionActionType const type.
1006func PossibleFirewallPolicyFilterRuleCollectionActionTypeValues() []FirewallPolicyFilterRuleCollectionActionType {
1007	return []FirewallPolicyFilterRuleCollectionActionType{FirewallPolicyFilterRuleCollectionActionTypeAllow, FirewallPolicyFilterRuleCollectionActionTypeDeny}
1008}
1009
1010// FirewallPolicyIntrusionSystemMode enumerates the values for firewall policy intrusion system mode.
1011type FirewallPolicyIntrusionSystemMode string
1012
1013const (
1014	// FirewallPolicyIntrusionSystemModeDisabled ...
1015	FirewallPolicyIntrusionSystemModeDisabled FirewallPolicyIntrusionSystemMode = "Disabled"
1016	// FirewallPolicyIntrusionSystemModeEnabled ...
1017	FirewallPolicyIntrusionSystemModeEnabled FirewallPolicyIntrusionSystemMode = "Enabled"
1018)
1019
1020// PossibleFirewallPolicyIntrusionSystemModeValues returns an array of possible values for the FirewallPolicyIntrusionSystemMode const type.
1021func PossibleFirewallPolicyIntrusionSystemModeValues() []FirewallPolicyIntrusionSystemMode {
1022	return []FirewallPolicyIntrusionSystemMode{FirewallPolicyIntrusionSystemModeDisabled, FirewallPolicyIntrusionSystemModeEnabled}
1023}
1024
1025// FirewallPolicyNatRuleCollectionActionType enumerates the values for firewall policy nat rule collection
1026// action type.
1027type FirewallPolicyNatRuleCollectionActionType string
1028
1029const (
1030	// DNAT ...
1031	DNAT FirewallPolicyNatRuleCollectionActionType = "DNAT"
1032)
1033
1034// PossibleFirewallPolicyNatRuleCollectionActionTypeValues returns an array of possible values for the FirewallPolicyNatRuleCollectionActionType const type.
1035func PossibleFirewallPolicyNatRuleCollectionActionTypeValues() []FirewallPolicyNatRuleCollectionActionType {
1036	return []FirewallPolicyNatRuleCollectionActionType{DNAT}
1037}
1038
1039// FirewallPolicyRuleApplicationProtocolType enumerates the values for firewall policy rule application
1040// protocol type.
1041type FirewallPolicyRuleApplicationProtocolType string
1042
1043const (
1044	// FirewallPolicyRuleApplicationProtocolTypeHTTP ...
1045	FirewallPolicyRuleApplicationProtocolTypeHTTP FirewallPolicyRuleApplicationProtocolType = "Http"
1046	// FirewallPolicyRuleApplicationProtocolTypeHTTPS ...
1047	FirewallPolicyRuleApplicationProtocolTypeHTTPS FirewallPolicyRuleApplicationProtocolType = "Https"
1048)
1049
1050// PossibleFirewallPolicyRuleApplicationProtocolTypeValues returns an array of possible values for the FirewallPolicyRuleApplicationProtocolType const type.
1051func PossibleFirewallPolicyRuleApplicationProtocolTypeValues() []FirewallPolicyRuleApplicationProtocolType {
1052	return []FirewallPolicyRuleApplicationProtocolType{FirewallPolicyRuleApplicationProtocolTypeHTTP, FirewallPolicyRuleApplicationProtocolTypeHTTPS}
1053}
1054
1055// FirewallPolicyRuleNetworkProtocol enumerates the values for firewall policy rule network protocol.
1056type FirewallPolicyRuleNetworkProtocol string
1057
1058const (
1059	// FirewallPolicyRuleNetworkProtocolAny ...
1060	FirewallPolicyRuleNetworkProtocolAny FirewallPolicyRuleNetworkProtocol = "Any"
1061	// FirewallPolicyRuleNetworkProtocolICMP ...
1062	FirewallPolicyRuleNetworkProtocolICMP FirewallPolicyRuleNetworkProtocol = "ICMP"
1063	// FirewallPolicyRuleNetworkProtocolTCP ...
1064	FirewallPolicyRuleNetworkProtocolTCP FirewallPolicyRuleNetworkProtocol = "TCP"
1065	// FirewallPolicyRuleNetworkProtocolUDP ...
1066	FirewallPolicyRuleNetworkProtocolUDP FirewallPolicyRuleNetworkProtocol = "UDP"
1067)
1068
1069// PossibleFirewallPolicyRuleNetworkProtocolValues returns an array of possible values for the FirewallPolicyRuleNetworkProtocol const type.
1070func PossibleFirewallPolicyRuleNetworkProtocolValues() []FirewallPolicyRuleNetworkProtocol {
1071	return []FirewallPolicyRuleNetworkProtocol{FirewallPolicyRuleNetworkProtocolAny, FirewallPolicyRuleNetworkProtocolICMP, FirewallPolicyRuleNetworkProtocolTCP, FirewallPolicyRuleNetworkProtocolUDP}
1072}
1073
1074// FlowLogFormatType enumerates the values for flow log format type.
1075type FlowLogFormatType string
1076
1077const (
1078	// JSON ...
1079	JSON FlowLogFormatType = "JSON"
1080)
1081
1082// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
1083func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
1084	return []FlowLogFormatType{JSON}
1085}
1086
1087// HTTPConfigurationMethod enumerates the values for http configuration method.
1088type HTTPConfigurationMethod string
1089
1090const (
1091	// Get ...
1092	Get HTTPConfigurationMethod = "Get"
1093	// Post ...
1094	Post HTTPConfigurationMethod = "Post"
1095)
1096
1097// PossibleHTTPConfigurationMethodValues returns an array of possible values for the HTTPConfigurationMethod const type.
1098func PossibleHTTPConfigurationMethodValues() []HTTPConfigurationMethod {
1099	return []HTTPConfigurationMethod{Get, Post}
1100}
1101
1102// HTTPMethod enumerates the values for http method.
1103type HTTPMethod string
1104
1105const (
1106	// HTTPMethodGet ...
1107	HTTPMethodGet HTTPMethod = "Get"
1108)
1109
1110// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
1111func PossibleHTTPMethodValues() []HTTPMethod {
1112	return []HTTPMethod{HTTPMethodGet}
1113}
1114
1115// HubBgpConnectionStatus enumerates the values for hub bgp connection status.
1116type HubBgpConnectionStatus string
1117
1118const (
1119	// HubBgpConnectionStatusConnected ...
1120	HubBgpConnectionStatusConnected HubBgpConnectionStatus = "Connected"
1121	// HubBgpConnectionStatusConnecting ...
1122	HubBgpConnectionStatusConnecting HubBgpConnectionStatus = "Connecting"
1123	// HubBgpConnectionStatusNotConnected ...
1124	HubBgpConnectionStatusNotConnected HubBgpConnectionStatus = "NotConnected"
1125	// HubBgpConnectionStatusUnknown ...
1126	HubBgpConnectionStatusUnknown HubBgpConnectionStatus = "Unknown"
1127)
1128
1129// PossibleHubBgpConnectionStatusValues returns an array of possible values for the HubBgpConnectionStatus const type.
1130func PossibleHubBgpConnectionStatusValues() []HubBgpConnectionStatus {
1131	return []HubBgpConnectionStatus{HubBgpConnectionStatusConnected, HubBgpConnectionStatusConnecting, HubBgpConnectionStatusNotConnected, HubBgpConnectionStatusUnknown}
1132}
1133
1134// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
1135type HubVirtualNetworkConnectionStatus string
1136
1137const (
1138	// HubVirtualNetworkConnectionStatusConnected ...
1139	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
1140	// HubVirtualNetworkConnectionStatusConnecting ...
1141	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
1142	// HubVirtualNetworkConnectionStatusNotConnected ...
1143	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
1144	// HubVirtualNetworkConnectionStatusUnknown ...
1145	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
1146)
1147
1148// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
1149func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
1150	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
1151}
1152
1153// IkeEncryption enumerates the values for ike encryption.
1154type IkeEncryption string
1155
1156const (
1157	// AES128 ...
1158	AES128 IkeEncryption = "AES128"
1159	// AES192 ...
1160	AES192 IkeEncryption = "AES192"
1161	// AES256 ...
1162	AES256 IkeEncryption = "AES256"
1163	// DES ...
1164	DES IkeEncryption = "DES"
1165	// DES3 ...
1166	DES3 IkeEncryption = "DES3"
1167	// GCMAES128 ...
1168	GCMAES128 IkeEncryption = "GCMAES128"
1169	// GCMAES256 ...
1170	GCMAES256 IkeEncryption = "GCMAES256"
1171)
1172
1173// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
1174func PossibleIkeEncryptionValues() []IkeEncryption {
1175	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
1176}
1177
1178// IkeIntegrity enumerates the values for ike integrity.
1179type IkeIntegrity string
1180
1181const (
1182	// IkeIntegrityGCMAES128 ...
1183	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
1184	// IkeIntegrityGCMAES256 ...
1185	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
1186	// IkeIntegrityMD5 ...
1187	IkeIntegrityMD5 IkeIntegrity = "MD5"
1188	// IkeIntegritySHA1 ...
1189	IkeIntegritySHA1 IkeIntegrity = "SHA1"
1190	// IkeIntegritySHA256 ...
1191	IkeIntegritySHA256 IkeIntegrity = "SHA256"
1192	// IkeIntegritySHA384 ...
1193	IkeIntegritySHA384 IkeIntegrity = "SHA384"
1194)
1195
1196// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
1197func PossibleIkeIntegrityValues() []IkeIntegrity {
1198	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
1199}
1200
1201// IPAllocationMethod enumerates the values for ip allocation method.
1202type IPAllocationMethod string
1203
1204const (
1205	// Dynamic ...
1206	Dynamic IPAllocationMethod = "Dynamic"
1207	// Static ...
1208	Static IPAllocationMethod = "Static"
1209)
1210
1211// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
1212func PossibleIPAllocationMethodValues() []IPAllocationMethod {
1213	return []IPAllocationMethod{Dynamic, Static}
1214}
1215
1216// IPAllocationType enumerates the values for ip allocation type.
1217type IPAllocationType string
1218
1219const (
1220	// Hypernet ...
1221	Hypernet IPAllocationType = "Hypernet"
1222	// Undefined ...
1223	Undefined IPAllocationType = "Undefined"
1224)
1225
1226// PossibleIPAllocationTypeValues returns an array of possible values for the IPAllocationType const type.
1227func PossibleIPAllocationTypeValues() []IPAllocationType {
1228	return []IPAllocationType{Hypernet, Undefined}
1229}
1230
1231// IPFlowProtocol enumerates the values for ip flow protocol.
1232type IPFlowProtocol string
1233
1234const (
1235	// IPFlowProtocolTCP ...
1236	IPFlowProtocolTCP IPFlowProtocol = "TCP"
1237	// IPFlowProtocolUDP ...
1238	IPFlowProtocolUDP IPFlowProtocol = "UDP"
1239)
1240
1241// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
1242func PossibleIPFlowProtocolValues() []IPFlowProtocol {
1243	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
1244}
1245
1246// IpsecEncryption enumerates the values for ipsec encryption.
1247type IpsecEncryption string
1248
1249const (
1250	// IpsecEncryptionAES128 ...
1251	IpsecEncryptionAES128 IpsecEncryption = "AES128"
1252	// IpsecEncryptionAES192 ...
1253	IpsecEncryptionAES192 IpsecEncryption = "AES192"
1254	// IpsecEncryptionAES256 ...
1255	IpsecEncryptionAES256 IpsecEncryption = "AES256"
1256	// IpsecEncryptionDES ...
1257	IpsecEncryptionDES IpsecEncryption = "DES"
1258	// IpsecEncryptionDES3 ...
1259	IpsecEncryptionDES3 IpsecEncryption = "DES3"
1260	// IpsecEncryptionGCMAES128 ...
1261	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
1262	// IpsecEncryptionGCMAES192 ...
1263	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
1264	// IpsecEncryptionGCMAES256 ...
1265	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
1266	// IpsecEncryptionNone ...
1267	IpsecEncryptionNone IpsecEncryption = "None"
1268)
1269
1270// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
1271func PossibleIpsecEncryptionValues() []IpsecEncryption {
1272	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
1273}
1274
1275// IpsecIntegrity enumerates the values for ipsec integrity.
1276type IpsecIntegrity string
1277
1278const (
1279	// IpsecIntegrityGCMAES128 ...
1280	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
1281	// IpsecIntegrityGCMAES192 ...
1282	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
1283	// IpsecIntegrityGCMAES256 ...
1284	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
1285	// IpsecIntegrityMD5 ...
1286	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
1287	// IpsecIntegritySHA1 ...
1288	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
1289	// IpsecIntegritySHA256 ...
1290	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
1291)
1292
1293// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
1294func PossibleIpsecIntegrityValues() []IpsecIntegrity {
1295	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
1296}
1297
1298// IPVersion enumerates the values for ip version.
1299type IPVersion string
1300
1301const (
1302	// IPv4 ...
1303	IPv4 IPVersion = "IPv4"
1304	// IPv6 ...
1305	IPv6 IPVersion = "IPv6"
1306)
1307
1308// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
1309func PossibleIPVersionValues() []IPVersion {
1310	return []IPVersion{IPv4, IPv6}
1311}
1312
1313// IssueType enumerates the values for issue type.
1314type IssueType string
1315
1316const (
1317	// IssueTypeAgentStopped ...
1318	IssueTypeAgentStopped IssueType = "AgentStopped"
1319	// IssueTypeDNSResolution ...
1320	IssueTypeDNSResolution IssueType = "DnsResolution"
1321	// IssueTypeGuestFirewall ...
1322	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1323	// IssueTypeNetworkSecurityRule ...
1324	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1325	// IssueTypePlatform ...
1326	IssueTypePlatform IssueType = "Platform"
1327	// IssueTypePortThrottled ...
1328	IssueTypePortThrottled IssueType = "PortThrottled"
1329	// IssueTypeSocketBind ...
1330	IssueTypeSocketBind IssueType = "SocketBind"
1331	// IssueTypeUnknown ...
1332	IssueTypeUnknown IssueType = "Unknown"
1333	// IssueTypeUserDefinedRoute ...
1334	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1335)
1336
1337// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1338func PossibleIssueTypeValues() []IssueType {
1339	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1340}
1341
1342// LoadBalancerOutboundRuleProtocol enumerates the values for load balancer outbound rule protocol.
1343type LoadBalancerOutboundRuleProtocol string
1344
1345const (
1346	// LoadBalancerOutboundRuleProtocolAll ...
1347	LoadBalancerOutboundRuleProtocolAll LoadBalancerOutboundRuleProtocol = "All"
1348	// LoadBalancerOutboundRuleProtocolTCP ...
1349	LoadBalancerOutboundRuleProtocolTCP LoadBalancerOutboundRuleProtocol = "Tcp"
1350	// LoadBalancerOutboundRuleProtocolUDP ...
1351	LoadBalancerOutboundRuleProtocolUDP LoadBalancerOutboundRuleProtocol = "Udp"
1352)
1353
1354// PossibleLoadBalancerOutboundRuleProtocolValues returns an array of possible values for the LoadBalancerOutboundRuleProtocol const type.
1355func PossibleLoadBalancerOutboundRuleProtocolValues() []LoadBalancerOutboundRuleProtocol {
1356	return []LoadBalancerOutboundRuleProtocol{LoadBalancerOutboundRuleProtocolAll, LoadBalancerOutboundRuleProtocolTCP, LoadBalancerOutboundRuleProtocolUDP}
1357}
1358
1359// LoadBalancerSkuName enumerates the values for load balancer sku name.
1360type LoadBalancerSkuName string
1361
1362const (
1363	// LoadBalancerSkuNameBasic ...
1364	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1365	// LoadBalancerSkuNameStandard ...
1366	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1367)
1368
1369// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1370func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1371	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1372}
1373
1374// LoadDistribution enumerates the values for load distribution.
1375type LoadDistribution string
1376
1377const (
1378	// LoadDistributionDefault ...
1379	LoadDistributionDefault LoadDistribution = "Default"
1380	// LoadDistributionSourceIP ...
1381	LoadDistributionSourceIP LoadDistribution = "SourceIP"
1382	// LoadDistributionSourceIPProtocol ...
1383	LoadDistributionSourceIPProtocol LoadDistribution = "SourceIPProtocol"
1384)
1385
1386// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1387func PossibleLoadDistributionValues() []LoadDistribution {
1388	return []LoadDistribution{LoadDistributionDefault, LoadDistributionSourceIP, LoadDistributionSourceIPProtocol}
1389}
1390
1391// ManagedRuleEnabledState enumerates the values for managed rule enabled state.
1392type ManagedRuleEnabledState string
1393
1394const (
1395	// ManagedRuleEnabledStateDisabled ...
1396	ManagedRuleEnabledStateDisabled ManagedRuleEnabledState = "Disabled"
1397)
1398
1399// PossibleManagedRuleEnabledStateValues returns an array of possible values for the ManagedRuleEnabledState const type.
1400func PossibleManagedRuleEnabledStateValues() []ManagedRuleEnabledState {
1401	return []ManagedRuleEnabledState{ManagedRuleEnabledStateDisabled}
1402}
1403
1404// NatGatewaySkuName enumerates the values for nat gateway sku name.
1405type NatGatewaySkuName string
1406
1407const (
1408	// NatGatewaySkuNameStandard ...
1409	NatGatewaySkuNameStandard NatGatewaySkuName = "Standard"
1410)
1411
1412// PossibleNatGatewaySkuNameValues returns an array of possible values for the NatGatewaySkuName const type.
1413func PossibleNatGatewaySkuNameValues() []NatGatewaySkuName {
1414	return []NatGatewaySkuName{NatGatewaySkuNameStandard}
1415}
1416
1417// NextHopType enumerates the values for next hop type.
1418type NextHopType string
1419
1420const (
1421	// NextHopTypeHyperNetGateway ...
1422	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1423	// NextHopTypeInternet ...
1424	NextHopTypeInternet NextHopType = "Internet"
1425	// NextHopTypeNone ...
1426	NextHopTypeNone NextHopType = "None"
1427	// NextHopTypeVirtualAppliance ...
1428	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1429	// NextHopTypeVirtualNetworkGateway ...
1430	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1431	// NextHopTypeVnetLocal ...
1432	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1433)
1434
1435// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1436func PossibleNextHopTypeValues() []NextHopType {
1437	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1438}
1439
1440// OfficeTrafficCategory enumerates the values for office traffic category.
1441type OfficeTrafficCategory string
1442
1443const (
1444	// OfficeTrafficCategoryAll ...
1445	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1446	// OfficeTrafficCategoryNone ...
1447	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1448	// OfficeTrafficCategoryOptimize ...
1449	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1450	// OfficeTrafficCategoryOptimizeAndAllow ...
1451	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1452)
1453
1454// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1455func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1456	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1457}
1458
1459// OperationStatus enumerates the values for operation status.
1460type OperationStatus string
1461
1462const (
1463	// OperationStatusFailed ...
1464	OperationStatusFailed OperationStatus = "Failed"
1465	// OperationStatusInProgress ...
1466	OperationStatusInProgress OperationStatus = "InProgress"
1467	// OperationStatusSucceeded ...
1468	OperationStatusSucceeded OperationStatus = "Succeeded"
1469)
1470
1471// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1472func PossibleOperationStatusValues() []OperationStatus {
1473	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1474}
1475
1476// Origin enumerates the values for origin.
1477type Origin string
1478
1479const (
1480	// OriginInbound ...
1481	OriginInbound Origin = "Inbound"
1482	// OriginLocal ...
1483	OriginLocal Origin = "Local"
1484	// OriginOutbound ...
1485	OriginOutbound Origin = "Outbound"
1486)
1487
1488// PossibleOriginValues returns an array of possible values for the Origin const type.
1489func PossibleOriginValues() []Origin {
1490	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1491}
1492
1493// OutputType enumerates the values for output type.
1494type OutputType string
1495
1496const (
1497	// Workspace ...
1498	Workspace OutputType = "Workspace"
1499)
1500
1501// PossibleOutputTypeValues returns an array of possible values for the OutputType const type.
1502func PossibleOutputTypeValues() []OutputType {
1503	return []OutputType{Workspace}
1504}
1505
1506// OwaspCrsExclusionEntryMatchVariable enumerates the values for owasp crs exclusion entry match variable.
1507type OwaspCrsExclusionEntryMatchVariable string
1508
1509const (
1510	// RequestArgNames ...
1511	RequestArgNames OwaspCrsExclusionEntryMatchVariable = "RequestArgNames"
1512	// RequestCookieNames ...
1513	RequestCookieNames OwaspCrsExclusionEntryMatchVariable = "RequestCookieNames"
1514	// RequestHeaderNames ...
1515	RequestHeaderNames OwaspCrsExclusionEntryMatchVariable = "RequestHeaderNames"
1516)
1517
1518// PossibleOwaspCrsExclusionEntryMatchVariableValues returns an array of possible values for the OwaspCrsExclusionEntryMatchVariable const type.
1519func PossibleOwaspCrsExclusionEntryMatchVariableValues() []OwaspCrsExclusionEntryMatchVariable {
1520	return []OwaspCrsExclusionEntryMatchVariable{RequestArgNames, RequestCookieNames, RequestHeaderNames}
1521}
1522
1523// OwaspCrsExclusionEntrySelectorMatchOperator enumerates the values for owasp crs exclusion entry selector
1524// match operator.
1525type OwaspCrsExclusionEntrySelectorMatchOperator string
1526
1527const (
1528	// OwaspCrsExclusionEntrySelectorMatchOperatorContains ...
1529	OwaspCrsExclusionEntrySelectorMatchOperatorContains OwaspCrsExclusionEntrySelectorMatchOperator = "Contains"
1530	// OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith ...
1531	OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith OwaspCrsExclusionEntrySelectorMatchOperator = "EndsWith"
1532	// OwaspCrsExclusionEntrySelectorMatchOperatorEquals ...
1533	OwaspCrsExclusionEntrySelectorMatchOperatorEquals OwaspCrsExclusionEntrySelectorMatchOperator = "Equals"
1534	// OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny ...
1535	OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny OwaspCrsExclusionEntrySelectorMatchOperator = "EqualsAny"
1536	// OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith ...
1537	OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith OwaspCrsExclusionEntrySelectorMatchOperator = "StartsWith"
1538)
1539
1540// PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues returns an array of possible values for the OwaspCrsExclusionEntrySelectorMatchOperator const type.
1541func PossibleOwaspCrsExclusionEntrySelectorMatchOperatorValues() []OwaspCrsExclusionEntrySelectorMatchOperator {
1542	return []OwaspCrsExclusionEntrySelectorMatchOperator{OwaspCrsExclusionEntrySelectorMatchOperatorContains, OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith, OwaspCrsExclusionEntrySelectorMatchOperatorEquals, OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny, OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith}
1543}
1544
1545// PcError enumerates the values for pc error.
1546type PcError string
1547
1548const (
1549	// AgentStopped ...
1550	AgentStopped PcError = "AgentStopped"
1551	// CaptureFailed ...
1552	CaptureFailed PcError = "CaptureFailed"
1553	// InternalError ...
1554	InternalError PcError = "InternalError"
1555	// LocalFileFailed ...
1556	LocalFileFailed PcError = "LocalFileFailed"
1557	// StorageFailed ...
1558	StorageFailed PcError = "StorageFailed"
1559)
1560
1561// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1562func PossiblePcErrorValues() []PcError {
1563	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1564}
1565
1566// PcProtocol enumerates the values for pc protocol.
1567type PcProtocol string
1568
1569const (
1570	// PcProtocolAny ...
1571	PcProtocolAny PcProtocol = "Any"
1572	// PcProtocolTCP ...
1573	PcProtocolTCP PcProtocol = "TCP"
1574	// PcProtocolUDP ...
1575	PcProtocolUDP PcProtocol = "UDP"
1576)
1577
1578// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1579func PossiblePcProtocolValues() []PcProtocol {
1580	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1581}
1582
1583// PcStatus enumerates the values for pc status.
1584type PcStatus string
1585
1586const (
1587	// PcStatusError ...
1588	PcStatusError PcStatus = "Error"
1589	// PcStatusNotStarted ...
1590	PcStatusNotStarted PcStatus = "NotStarted"
1591	// PcStatusRunning ...
1592	PcStatusRunning PcStatus = "Running"
1593	// PcStatusStopped ...
1594	PcStatusStopped PcStatus = "Stopped"
1595	// PcStatusUnknown ...
1596	PcStatusUnknown PcStatus = "Unknown"
1597)
1598
1599// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1600func PossiblePcStatusValues() []PcStatus {
1601	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1602}
1603
1604// PfsGroup enumerates the values for pfs group.
1605type PfsGroup string
1606
1607const (
1608	// PfsGroupECP256 ...
1609	PfsGroupECP256 PfsGroup = "ECP256"
1610	// PfsGroupECP384 ...
1611	PfsGroupECP384 PfsGroup = "ECP384"
1612	// PfsGroupNone ...
1613	PfsGroupNone PfsGroup = "None"
1614	// PfsGroupPFS1 ...
1615	PfsGroupPFS1 PfsGroup = "PFS1"
1616	// PfsGroupPFS14 ...
1617	PfsGroupPFS14 PfsGroup = "PFS14"
1618	// PfsGroupPFS2 ...
1619	PfsGroupPFS2 PfsGroup = "PFS2"
1620	// PfsGroupPFS2048 ...
1621	PfsGroupPFS2048 PfsGroup = "PFS2048"
1622	// PfsGroupPFS24 ...
1623	PfsGroupPFS24 PfsGroup = "PFS24"
1624	// PfsGroupPFSMM ...
1625	PfsGroupPFSMM PfsGroup = "PFSMM"
1626)
1627
1628// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1629func PossiblePfsGroupValues() []PfsGroup {
1630	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1631}
1632
1633// PreferredIPVersion enumerates the values for preferred ip version.
1634type PreferredIPVersion string
1635
1636const (
1637	// PreferredIPVersionIPv4 ...
1638	PreferredIPVersionIPv4 PreferredIPVersion = "IPv4"
1639	// PreferredIPVersionIPv6 ...
1640	PreferredIPVersionIPv6 PreferredIPVersion = "IPv6"
1641)
1642
1643// PossiblePreferredIPVersionValues returns an array of possible values for the PreferredIPVersion const type.
1644func PossiblePreferredIPVersionValues() []PreferredIPVersion {
1645	return []PreferredIPVersion{PreferredIPVersionIPv4, PreferredIPVersionIPv6}
1646}
1647
1648// ProbeProtocol enumerates the values for probe protocol.
1649type ProbeProtocol string
1650
1651const (
1652	// ProbeProtocolHTTP ...
1653	ProbeProtocolHTTP ProbeProtocol = "Http"
1654	// ProbeProtocolHTTPS ...
1655	ProbeProtocolHTTPS ProbeProtocol = "Https"
1656	// ProbeProtocolTCP ...
1657	ProbeProtocolTCP ProbeProtocol = "Tcp"
1658)
1659
1660// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1661func PossibleProbeProtocolValues() []ProbeProtocol {
1662	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1663}
1664
1665// ProcessorArchitecture enumerates the values for processor architecture.
1666type ProcessorArchitecture string
1667
1668const (
1669	// Amd64 ...
1670	Amd64 ProcessorArchitecture = "Amd64"
1671	// X86 ...
1672	X86 ProcessorArchitecture = "X86"
1673)
1674
1675// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1676func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1677	return []ProcessorArchitecture{Amd64, X86}
1678}
1679
1680// Protocol enumerates the values for protocol.
1681type Protocol string
1682
1683const (
1684	// ProtocolHTTP ...
1685	ProtocolHTTP Protocol = "Http"
1686	// ProtocolHTTPS ...
1687	ProtocolHTTPS Protocol = "Https"
1688	// ProtocolIcmp ...
1689	ProtocolIcmp Protocol = "Icmp"
1690	// ProtocolTCP ...
1691	ProtocolTCP Protocol = "Tcp"
1692)
1693
1694// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1695func PossibleProtocolValues() []Protocol {
1696	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1697}
1698
1699// ProvisioningState enumerates the values for provisioning state.
1700type ProvisioningState string
1701
1702const (
1703	// Deleting ...
1704	Deleting ProvisioningState = "Deleting"
1705	// Failed ...
1706	Failed ProvisioningState = "Failed"
1707	// Succeeded ...
1708	Succeeded ProvisioningState = "Succeeded"
1709	// Updating ...
1710	Updating ProvisioningState = "Updating"
1711)
1712
1713// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1714func PossibleProvisioningStateValues() []ProvisioningState {
1715	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1716}
1717
1718// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1719type PublicIPAddressSkuName string
1720
1721const (
1722	// PublicIPAddressSkuNameBasic ...
1723	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1724	// PublicIPAddressSkuNameStandard ...
1725	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1726)
1727
1728// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1729func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1730	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1731}
1732
1733// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1734type PublicIPPrefixSkuName string
1735
1736const (
1737	// PublicIPPrefixSkuNameStandard ...
1738	PublicIPPrefixSkuNameStandard PublicIPPrefixSkuName = "Standard"
1739)
1740
1741// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1742func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1743	return []PublicIPPrefixSkuName{PublicIPPrefixSkuNameStandard}
1744}
1745
1746// ResourceIdentityType enumerates the values for resource identity type.
1747type ResourceIdentityType string
1748
1749const (
1750	// ResourceIdentityTypeNone ...
1751	ResourceIdentityTypeNone ResourceIdentityType = "None"
1752	// ResourceIdentityTypeSystemAssigned ...
1753	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1754	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1755	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1756	// ResourceIdentityTypeUserAssigned ...
1757	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1758)
1759
1760// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1761func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1762	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1763}
1764
1765// RouteNextHopType enumerates the values for route next hop type.
1766type RouteNextHopType string
1767
1768const (
1769	// RouteNextHopTypeInternet ...
1770	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1771	// RouteNextHopTypeNone ...
1772	RouteNextHopTypeNone RouteNextHopType = "None"
1773	// RouteNextHopTypeVirtualAppliance ...
1774	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1775	// RouteNextHopTypeVirtualNetworkGateway ...
1776	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1777	// RouteNextHopTypeVnetLocal ...
1778	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1779)
1780
1781// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1782func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1783	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1784}
1785
1786// RoutingState enumerates the values for routing state.
1787type RoutingState string
1788
1789const (
1790	// RoutingStateFailed ...
1791	RoutingStateFailed RoutingState = "Failed"
1792	// RoutingStateNone ...
1793	RoutingStateNone RoutingState = "None"
1794	// RoutingStateProvisioned ...
1795	RoutingStateProvisioned RoutingState = "Provisioned"
1796	// RoutingStateProvisioning ...
1797	RoutingStateProvisioning RoutingState = "Provisioning"
1798)
1799
1800// PossibleRoutingStateValues returns an array of possible values for the RoutingState const type.
1801func PossibleRoutingStateValues() []RoutingState {
1802	return []RoutingState{RoutingStateFailed, RoutingStateNone, RoutingStateProvisioned, RoutingStateProvisioning}
1803}
1804
1805// RuleCollectionType enumerates the values for rule collection type.
1806type RuleCollectionType string
1807
1808const (
1809	// RuleCollectionTypeFirewallPolicyFilterRuleCollection ...
1810	RuleCollectionTypeFirewallPolicyFilterRuleCollection RuleCollectionType = "FirewallPolicyFilterRuleCollection"
1811	// RuleCollectionTypeFirewallPolicyNatRuleCollection ...
1812	RuleCollectionTypeFirewallPolicyNatRuleCollection RuleCollectionType = "FirewallPolicyNatRuleCollection"
1813	// RuleCollectionTypeFirewallPolicyRuleCollection ...
1814	RuleCollectionTypeFirewallPolicyRuleCollection RuleCollectionType = "FirewallPolicyRuleCollection"
1815)
1816
1817// PossibleRuleCollectionTypeValues returns an array of possible values for the RuleCollectionType const type.
1818func PossibleRuleCollectionTypeValues() []RuleCollectionType {
1819	return []RuleCollectionType{RuleCollectionTypeFirewallPolicyFilterRuleCollection, RuleCollectionTypeFirewallPolicyNatRuleCollection, RuleCollectionTypeFirewallPolicyRuleCollection}
1820}
1821
1822// RuleType enumerates the values for rule type.
1823type RuleType string
1824
1825const (
1826	// RuleTypeApplicationRule ...
1827	RuleTypeApplicationRule RuleType = "ApplicationRule"
1828	// RuleTypeFirewallPolicyRule ...
1829	RuleTypeFirewallPolicyRule RuleType = "FirewallPolicyRule"
1830	// RuleTypeNatRule ...
1831	RuleTypeNatRule RuleType = "NatRule"
1832	// RuleTypeNetworkRule ...
1833	RuleTypeNetworkRule RuleType = "NetworkRule"
1834)
1835
1836// PossibleRuleTypeValues returns an array of possible values for the RuleType const type.
1837func PossibleRuleTypeValues() []RuleType {
1838	return []RuleType{RuleTypeApplicationRule, RuleTypeFirewallPolicyRule, RuleTypeNatRule, RuleTypeNetworkRule}
1839}
1840
1841// SecurityPartnerProviderConnectionStatus enumerates the values for security partner provider connection
1842// status.
1843type SecurityPartnerProviderConnectionStatus string
1844
1845const (
1846	// SecurityPartnerProviderConnectionStatusConnected ...
1847	SecurityPartnerProviderConnectionStatusConnected SecurityPartnerProviderConnectionStatus = "Connected"
1848	// SecurityPartnerProviderConnectionStatusNotConnected ...
1849	SecurityPartnerProviderConnectionStatusNotConnected SecurityPartnerProviderConnectionStatus = "NotConnected"
1850	// SecurityPartnerProviderConnectionStatusPartiallyConnected ...
1851	SecurityPartnerProviderConnectionStatusPartiallyConnected SecurityPartnerProviderConnectionStatus = "PartiallyConnected"
1852	// SecurityPartnerProviderConnectionStatusUnknown ...
1853	SecurityPartnerProviderConnectionStatusUnknown SecurityPartnerProviderConnectionStatus = "Unknown"
1854)
1855
1856// PossibleSecurityPartnerProviderConnectionStatusValues returns an array of possible values for the SecurityPartnerProviderConnectionStatus const type.
1857func PossibleSecurityPartnerProviderConnectionStatusValues() []SecurityPartnerProviderConnectionStatus {
1858	return []SecurityPartnerProviderConnectionStatus{SecurityPartnerProviderConnectionStatusConnected, SecurityPartnerProviderConnectionStatusNotConnected, SecurityPartnerProviderConnectionStatusPartiallyConnected, SecurityPartnerProviderConnectionStatusUnknown}
1859}
1860
1861// SecurityProviderName enumerates the values for security provider name.
1862type SecurityProviderName string
1863
1864const (
1865	// Checkpoint ...
1866	Checkpoint SecurityProviderName = "Checkpoint"
1867	// IBoss ...
1868	IBoss SecurityProviderName = "IBoss"
1869	// ZScaler ...
1870	ZScaler SecurityProviderName = "ZScaler"
1871)
1872
1873// PossibleSecurityProviderNameValues returns an array of possible values for the SecurityProviderName const type.
1874func PossibleSecurityProviderNameValues() []SecurityProviderName {
1875	return []SecurityProviderName{Checkpoint, IBoss, ZScaler}
1876}
1877
1878// SecurityRuleAccess enumerates the values for security rule access.
1879type SecurityRuleAccess string
1880
1881const (
1882	// SecurityRuleAccessAllow ...
1883	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1884	// SecurityRuleAccessDeny ...
1885	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1886)
1887
1888// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1889func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1890	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1891}
1892
1893// SecurityRuleDirection enumerates the values for security rule direction.
1894type SecurityRuleDirection string
1895
1896const (
1897	// SecurityRuleDirectionInbound ...
1898	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1899	// SecurityRuleDirectionOutbound ...
1900	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1901)
1902
1903// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1904func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1905	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1906}
1907
1908// SecurityRuleProtocol enumerates the values for security rule protocol.
1909type SecurityRuleProtocol string
1910
1911const (
1912	// SecurityRuleProtocolAh ...
1913	SecurityRuleProtocolAh SecurityRuleProtocol = "Ah"
1914	// SecurityRuleProtocolAsterisk ...
1915	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1916	// SecurityRuleProtocolEsp ...
1917	SecurityRuleProtocolEsp SecurityRuleProtocol = "Esp"
1918	// SecurityRuleProtocolIcmp ...
1919	SecurityRuleProtocolIcmp SecurityRuleProtocol = "Icmp"
1920	// SecurityRuleProtocolTCP ...
1921	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1922	// SecurityRuleProtocolUDP ...
1923	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1924)
1925
1926// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1927func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1928	return []SecurityRuleProtocol{SecurityRuleProtocolAh, SecurityRuleProtocolAsterisk, SecurityRuleProtocolEsp, SecurityRuleProtocolIcmp, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1929}
1930
1931// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1932type ServiceProviderProvisioningState string
1933
1934const (
1935	// Deprovisioning ...
1936	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1937	// NotProvisioned ...
1938	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1939	// Provisioned ...
1940	Provisioned ServiceProviderProvisioningState = "Provisioned"
1941	// Provisioning ...
1942	Provisioning ServiceProviderProvisioningState = "Provisioning"
1943)
1944
1945// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1946func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1947	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1948}
1949
1950// Severity enumerates the values for severity.
1951type Severity string
1952
1953const (
1954	// SeverityError ...
1955	SeverityError Severity = "Error"
1956	// SeverityWarning ...
1957	SeverityWarning Severity = "Warning"
1958)
1959
1960// PossibleSeverityValues returns an array of possible values for the Severity const type.
1961func PossibleSeverityValues() []Severity {
1962	return []Severity{SeverityError, SeverityWarning}
1963}
1964
1965// TransportProtocol enumerates the values for transport protocol.
1966type TransportProtocol string
1967
1968const (
1969	// TransportProtocolAll ...
1970	TransportProtocolAll TransportProtocol = "All"
1971	// TransportProtocolTCP ...
1972	TransportProtocolTCP TransportProtocol = "Tcp"
1973	// TransportProtocolUDP ...
1974	TransportProtocolUDP TransportProtocol = "Udp"
1975)
1976
1977// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1978func PossibleTransportProtocolValues() []TransportProtocol {
1979	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1980}
1981
1982// TunnelConnectionStatus enumerates the values for tunnel connection status.
1983type TunnelConnectionStatus string
1984
1985const (
1986	// TunnelConnectionStatusConnected ...
1987	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1988	// TunnelConnectionStatusConnecting ...
1989	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1990	// TunnelConnectionStatusNotConnected ...
1991	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1992	// TunnelConnectionStatusUnknown ...
1993	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1994)
1995
1996// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1997func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1998	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1999}
2000
2001// VerbosityLevel enumerates the values for verbosity level.
2002type VerbosityLevel string
2003
2004const (
2005	// Full ...
2006	Full VerbosityLevel = "Full"
2007	// Minimum ...
2008	Minimum VerbosityLevel = "Minimum"
2009	// Normal ...
2010	Normal VerbosityLevel = "Normal"
2011)
2012
2013// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
2014func PossibleVerbosityLevelValues() []VerbosityLevel {
2015	return []VerbosityLevel{Full, Minimum, Normal}
2016}
2017
2018// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
2019// protocol.
2020type VirtualNetworkGatewayConnectionProtocol string
2021
2022const (
2023	// IKEv1 ...
2024	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
2025	// IKEv2 ...
2026	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
2027)
2028
2029// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
2030func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
2031	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
2032}
2033
2034// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
2035type VirtualNetworkGatewayConnectionStatus string
2036
2037const (
2038	// VirtualNetworkGatewayConnectionStatusConnected ...
2039	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
2040	// VirtualNetworkGatewayConnectionStatusConnecting ...
2041	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
2042	// VirtualNetworkGatewayConnectionStatusNotConnected ...
2043	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
2044	// VirtualNetworkGatewayConnectionStatusUnknown ...
2045	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
2046)
2047
2048// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
2049func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
2050	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
2051}
2052
2053// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
2054type VirtualNetworkGatewayConnectionType string
2055
2056const (
2057	// ExpressRoute ...
2058	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
2059	// IPsec ...
2060	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
2061	// Vnet2Vnet ...
2062	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
2063	// VPNClient ...
2064	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
2065)
2066
2067// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
2068func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
2069	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
2070}
2071
2072// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
2073type VirtualNetworkGatewaySkuName string
2074
2075const (
2076	// VirtualNetworkGatewaySkuNameBasic ...
2077	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
2078	// VirtualNetworkGatewaySkuNameErGw1AZ ...
2079	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
2080	// VirtualNetworkGatewaySkuNameErGw2AZ ...
2081	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
2082	// VirtualNetworkGatewaySkuNameErGw3AZ ...
2083	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
2084	// VirtualNetworkGatewaySkuNameHighPerformance ...
2085	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
2086	// VirtualNetworkGatewaySkuNameStandard ...
2087	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
2088	// VirtualNetworkGatewaySkuNameUltraPerformance ...
2089	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
2090	// VirtualNetworkGatewaySkuNameVpnGw1 ...
2091	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
2092	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
2093	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
2094	// VirtualNetworkGatewaySkuNameVpnGw2 ...
2095	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
2096	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
2097	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
2098	// VirtualNetworkGatewaySkuNameVpnGw3 ...
2099	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
2100	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
2101	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
2102	// VirtualNetworkGatewaySkuNameVpnGw4 ...
2103	VirtualNetworkGatewaySkuNameVpnGw4 VirtualNetworkGatewaySkuName = "VpnGw4"
2104	// VirtualNetworkGatewaySkuNameVpnGw4AZ ...
2105	VirtualNetworkGatewaySkuNameVpnGw4AZ VirtualNetworkGatewaySkuName = "VpnGw4AZ"
2106	// VirtualNetworkGatewaySkuNameVpnGw5 ...
2107	VirtualNetworkGatewaySkuNameVpnGw5 VirtualNetworkGatewaySkuName = "VpnGw5"
2108	// VirtualNetworkGatewaySkuNameVpnGw5AZ ...
2109	VirtualNetworkGatewaySkuNameVpnGw5AZ VirtualNetworkGatewaySkuName = "VpnGw5AZ"
2110)
2111
2112// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
2113func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
2114	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ, VirtualNetworkGatewaySkuNameVpnGw4, VirtualNetworkGatewaySkuNameVpnGw4AZ, VirtualNetworkGatewaySkuNameVpnGw5, VirtualNetworkGatewaySkuNameVpnGw5AZ}
2115}
2116
2117// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
2118type VirtualNetworkGatewaySkuTier string
2119
2120const (
2121	// VirtualNetworkGatewaySkuTierBasic ...
2122	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
2123	// VirtualNetworkGatewaySkuTierErGw1AZ ...
2124	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
2125	// VirtualNetworkGatewaySkuTierErGw2AZ ...
2126	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
2127	// VirtualNetworkGatewaySkuTierErGw3AZ ...
2128	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
2129	// VirtualNetworkGatewaySkuTierHighPerformance ...
2130	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
2131	// VirtualNetworkGatewaySkuTierStandard ...
2132	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
2133	// VirtualNetworkGatewaySkuTierUltraPerformance ...
2134	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
2135	// VirtualNetworkGatewaySkuTierVpnGw1 ...
2136	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
2137	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
2138	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
2139	// VirtualNetworkGatewaySkuTierVpnGw2 ...
2140	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
2141	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
2142	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
2143	// VirtualNetworkGatewaySkuTierVpnGw3 ...
2144	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
2145	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
2146	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
2147	// VirtualNetworkGatewaySkuTierVpnGw4 ...
2148	VirtualNetworkGatewaySkuTierVpnGw4 VirtualNetworkGatewaySkuTier = "VpnGw4"
2149	// VirtualNetworkGatewaySkuTierVpnGw4AZ ...
2150	VirtualNetworkGatewaySkuTierVpnGw4AZ VirtualNetworkGatewaySkuTier = "VpnGw4AZ"
2151	// VirtualNetworkGatewaySkuTierVpnGw5 ...
2152	VirtualNetworkGatewaySkuTierVpnGw5 VirtualNetworkGatewaySkuTier = "VpnGw5"
2153	// VirtualNetworkGatewaySkuTierVpnGw5AZ ...
2154	VirtualNetworkGatewaySkuTierVpnGw5AZ VirtualNetworkGatewaySkuTier = "VpnGw5AZ"
2155)
2156
2157// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
2158func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
2159	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ, VirtualNetworkGatewaySkuTierVpnGw4, VirtualNetworkGatewaySkuTierVpnGw4AZ, VirtualNetworkGatewaySkuTierVpnGw5, VirtualNetworkGatewaySkuTierVpnGw5AZ}
2160}
2161
2162// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
2163type VirtualNetworkGatewayType string
2164
2165const (
2166	// VirtualNetworkGatewayTypeExpressRoute ...
2167	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
2168	// VirtualNetworkGatewayTypeVpn ...
2169	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
2170)
2171
2172// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
2173func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
2174	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
2175}
2176
2177// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
2178type VirtualNetworkPeeringState string
2179
2180const (
2181	// VirtualNetworkPeeringStateConnected ...
2182	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
2183	// VirtualNetworkPeeringStateDisconnected ...
2184	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
2185	// VirtualNetworkPeeringStateInitiated ...
2186	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
2187)
2188
2189// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
2190func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
2191	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
2192}
2193
2194// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
2195type VirtualWanSecurityProviderType string
2196
2197const (
2198	// External ...
2199	External VirtualWanSecurityProviderType = "External"
2200	// Native ...
2201	Native VirtualWanSecurityProviderType = "Native"
2202)
2203
2204// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
2205func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
2206	return []VirtualWanSecurityProviderType{External, Native}
2207}
2208
2209// VpnAuthenticationType enumerates the values for vpn authentication type.
2210type VpnAuthenticationType string
2211
2212const (
2213	// AAD ...
2214	AAD VpnAuthenticationType = "AAD"
2215	// Certificate ...
2216	Certificate VpnAuthenticationType = "Certificate"
2217	// Radius ...
2218	Radius VpnAuthenticationType = "Radius"
2219)
2220
2221// PossibleVpnAuthenticationTypeValues returns an array of possible values for the VpnAuthenticationType const type.
2222func PossibleVpnAuthenticationTypeValues() []VpnAuthenticationType {
2223	return []VpnAuthenticationType{AAD, Certificate, Radius}
2224}
2225
2226// VpnClientProtocol enumerates the values for vpn client protocol.
2227type VpnClientProtocol string
2228
2229const (
2230	// IkeV2 ...
2231	IkeV2 VpnClientProtocol = "IkeV2"
2232	// OpenVPN ...
2233	OpenVPN VpnClientProtocol = "OpenVPN"
2234	// SSTP ...
2235	SSTP VpnClientProtocol = "SSTP"
2236)
2237
2238// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
2239func PossibleVpnClientProtocolValues() []VpnClientProtocol {
2240	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
2241}
2242
2243// VpnConnectionStatus enumerates the values for vpn connection status.
2244type VpnConnectionStatus string
2245
2246const (
2247	// VpnConnectionStatusConnected ...
2248	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
2249	// VpnConnectionStatusConnecting ...
2250	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
2251	// VpnConnectionStatusNotConnected ...
2252	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
2253	// VpnConnectionStatusUnknown ...
2254	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
2255)
2256
2257// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
2258func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
2259	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
2260}
2261
2262// VpnGatewayGeneration enumerates the values for vpn gateway generation.
2263type VpnGatewayGeneration string
2264
2265const (
2266	// VpnGatewayGenerationGeneration1 ...
2267	VpnGatewayGenerationGeneration1 VpnGatewayGeneration = "Generation1"
2268	// VpnGatewayGenerationGeneration2 ...
2269	VpnGatewayGenerationGeneration2 VpnGatewayGeneration = "Generation2"
2270	// VpnGatewayGenerationNone ...
2271	VpnGatewayGenerationNone VpnGatewayGeneration = "None"
2272)
2273
2274// PossibleVpnGatewayGenerationValues returns an array of possible values for the VpnGatewayGeneration const type.
2275func PossibleVpnGatewayGenerationValues() []VpnGatewayGeneration {
2276	return []VpnGatewayGeneration{VpnGatewayGenerationGeneration1, VpnGatewayGenerationGeneration2, VpnGatewayGenerationNone}
2277}
2278
2279// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
2280type VpnGatewayTunnelingProtocol string
2281
2282const (
2283	// VpnGatewayTunnelingProtocolIkeV2 ...
2284	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
2285	// VpnGatewayTunnelingProtocolOpenVPN ...
2286	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
2287)
2288
2289// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
2290func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
2291	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
2292}
2293
2294// VpnType enumerates the values for vpn type.
2295type VpnType string
2296
2297const (
2298	// PolicyBased ...
2299	PolicyBased VpnType = "PolicyBased"
2300	// RouteBased ...
2301	RouteBased VpnType = "RouteBased"
2302)
2303
2304// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
2305func PossibleVpnTypeValues() []VpnType {
2306	return []VpnType{PolicyBased, RouteBased}
2307}
2308
2309// WebApplicationFirewallAction enumerates the values for web application firewall action.
2310type WebApplicationFirewallAction string
2311
2312const (
2313	// WebApplicationFirewallActionAllow ...
2314	WebApplicationFirewallActionAllow WebApplicationFirewallAction = "Allow"
2315	// WebApplicationFirewallActionBlock ...
2316	WebApplicationFirewallActionBlock WebApplicationFirewallAction = "Block"
2317	// WebApplicationFirewallActionLog ...
2318	WebApplicationFirewallActionLog WebApplicationFirewallAction = "Log"
2319)
2320
2321// PossibleWebApplicationFirewallActionValues returns an array of possible values for the WebApplicationFirewallAction const type.
2322func PossibleWebApplicationFirewallActionValues() []WebApplicationFirewallAction {
2323	return []WebApplicationFirewallAction{WebApplicationFirewallActionAllow, WebApplicationFirewallActionBlock, WebApplicationFirewallActionLog}
2324}
2325
2326// WebApplicationFirewallEnabledState enumerates the values for web application firewall enabled state.
2327type WebApplicationFirewallEnabledState string
2328
2329const (
2330	// WebApplicationFirewallEnabledStateDisabled ...
2331	WebApplicationFirewallEnabledStateDisabled WebApplicationFirewallEnabledState = "Disabled"
2332	// WebApplicationFirewallEnabledStateEnabled ...
2333	WebApplicationFirewallEnabledStateEnabled WebApplicationFirewallEnabledState = "Enabled"
2334)
2335
2336// PossibleWebApplicationFirewallEnabledStateValues returns an array of possible values for the WebApplicationFirewallEnabledState const type.
2337func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewallEnabledState {
2338	return []WebApplicationFirewallEnabledState{WebApplicationFirewallEnabledStateDisabled, WebApplicationFirewallEnabledStateEnabled}
2339}
2340
2341// WebApplicationFirewallMatchVariable enumerates the values for web application firewall match variable.
2342type WebApplicationFirewallMatchVariable string
2343
2344const (
2345	// PostArgs ...
2346	PostArgs WebApplicationFirewallMatchVariable = "PostArgs"
2347	// QueryString ...
2348	QueryString WebApplicationFirewallMatchVariable = "QueryString"
2349	// RemoteAddr ...
2350	RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr"
2351	// RequestBody ...
2352	RequestBody WebApplicationFirewallMatchVariable = "RequestBody"
2353	// RequestCookies ...
2354	RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies"
2355	// RequestHeaders ...
2356	RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders"
2357	// RequestMethod ...
2358	RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod"
2359	// RequestURI ...
2360	RequestURI WebApplicationFirewallMatchVariable = "RequestUri"
2361)
2362
2363// PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type.
2364func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable {
2365	return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI}
2366}
2367
2368// WebApplicationFirewallMode enumerates the values for web application firewall mode.
2369type WebApplicationFirewallMode string
2370
2371const (
2372	// WebApplicationFirewallModeDetection ...
2373	WebApplicationFirewallModeDetection WebApplicationFirewallMode = "Detection"
2374	// WebApplicationFirewallModePrevention ...
2375	WebApplicationFirewallModePrevention WebApplicationFirewallMode = "Prevention"
2376)
2377
2378// PossibleWebApplicationFirewallModeValues returns an array of possible values for the WebApplicationFirewallMode const type.
2379func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode {
2380	return []WebApplicationFirewallMode{WebApplicationFirewallModeDetection, WebApplicationFirewallModePrevention}
2381}
2382
2383// WebApplicationFirewallOperator enumerates the values for web application firewall operator.
2384type WebApplicationFirewallOperator string
2385
2386const (
2387	// WebApplicationFirewallOperatorBeginsWith ...
2388	WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith"
2389	// WebApplicationFirewallOperatorContains ...
2390	WebApplicationFirewallOperatorContains WebApplicationFirewallOperator = "Contains"
2391	// WebApplicationFirewallOperatorEndsWith ...
2392	WebApplicationFirewallOperatorEndsWith WebApplicationFirewallOperator = "EndsWith"
2393	// WebApplicationFirewallOperatorEqual ...
2394	WebApplicationFirewallOperatorEqual WebApplicationFirewallOperator = "Equal"
2395	// WebApplicationFirewallOperatorGeoMatch ...
2396	WebApplicationFirewallOperatorGeoMatch WebApplicationFirewallOperator = "GeoMatch"
2397	// WebApplicationFirewallOperatorGreaterThan ...
2398	WebApplicationFirewallOperatorGreaterThan WebApplicationFirewallOperator = "GreaterThan"
2399	// WebApplicationFirewallOperatorGreaterThanOrEqual ...
2400	WebApplicationFirewallOperatorGreaterThanOrEqual WebApplicationFirewallOperator = "GreaterThanOrEqual"
2401	// WebApplicationFirewallOperatorIPMatch ...
2402	WebApplicationFirewallOperatorIPMatch WebApplicationFirewallOperator = "IPMatch"
2403	// WebApplicationFirewallOperatorLessThan ...
2404	WebApplicationFirewallOperatorLessThan WebApplicationFirewallOperator = "LessThan"
2405	// WebApplicationFirewallOperatorLessThanOrEqual ...
2406	WebApplicationFirewallOperatorLessThanOrEqual WebApplicationFirewallOperator = "LessThanOrEqual"
2407	// WebApplicationFirewallOperatorRegex ...
2408	WebApplicationFirewallOperatorRegex WebApplicationFirewallOperator = "Regex"
2409)
2410
2411// PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type.
2412func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator {
2413	return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGeoMatch, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex}
2414}
2415
2416// WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource
2417// state.
2418type WebApplicationFirewallPolicyResourceState string
2419
2420const (
2421	// WebApplicationFirewallPolicyResourceStateCreating ...
2422	WebApplicationFirewallPolicyResourceStateCreating WebApplicationFirewallPolicyResourceState = "Creating"
2423	// WebApplicationFirewallPolicyResourceStateDeleting ...
2424	WebApplicationFirewallPolicyResourceStateDeleting WebApplicationFirewallPolicyResourceState = "Deleting"
2425	// WebApplicationFirewallPolicyResourceStateDisabled ...
2426	WebApplicationFirewallPolicyResourceStateDisabled WebApplicationFirewallPolicyResourceState = "Disabled"
2427	// WebApplicationFirewallPolicyResourceStateDisabling ...
2428	WebApplicationFirewallPolicyResourceStateDisabling WebApplicationFirewallPolicyResourceState = "Disabling"
2429	// WebApplicationFirewallPolicyResourceStateEnabled ...
2430	WebApplicationFirewallPolicyResourceStateEnabled WebApplicationFirewallPolicyResourceState = "Enabled"
2431	// WebApplicationFirewallPolicyResourceStateEnabling ...
2432	WebApplicationFirewallPolicyResourceStateEnabling WebApplicationFirewallPolicyResourceState = "Enabling"
2433)
2434
2435// PossibleWebApplicationFirewallPolicyResourceStateValues returns an array of possible values for the WebApplicationFirewallPolicyResourceState const type.
2436func PossibleWebApplicationFirewallPolicyResourceStateValues() []WebApplicationFirewallPolicyResourceState {
2437	return []WebApplicationFirewallPolicyResourceState{WebApplicationFirewallPolicyResourceStateCreating, WebApplicationFirewallPolicyResourceStateDeleting, WebApplicationFirewallPolicyResourceStateDisabled, WebApplicationFirewallPolicyResourceStateDisabling, WebApplicationFirewallPolicyResourceStateEnabled, WebApplicationFirewallPolicyResourceStateEnabling}
2438}
2439
2440// WebApplicationFirewallRuleType enumerates the values for web application firewall rule type.
2441type WebApplicationFirewallRuleType string
2442
2443const (
2444	// WebApplicationFirewallRuleTypeInvalid ...
2445	WebApplicationFirewallRuleTypeInvalid WebApplicationFirewallRuleType = "Invalid"
2446	// WebApplicationFirewallRuleTypeMatchRule ...
2447	WebApplicationFirewallRuleTypeMatchRule WebApplicationFirewallRuleType = "MatchRule"
2448)
2449
2450// PossibleWebApplicationFirewallRuleTypeValues returns an array of possible values for the WebApplicationFirewallRuleType const type.
2451func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRuleType {
2452	return []WebApplicationFirewallRuleType{WebApplicationFirewallRuleTypeInvalid, WebApplicationFirewallRuleTypeMatchRule}
2453}
2454
2455// WebApplicationFirewallTransform enumerates the values for web application firewall transform.
2456type WebApplicationFirewallTransform string
2457
2458const (
2459	// HTMLEntityDecode ...
2460	HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode"
2461	// Lowercase ...
2462	Lowercase WebApplicationFirewallTransform = "Lowercase"
2463	// RemoveNulls ...
2464	RemoveNulls WebApplicationFirewallTransform = "RemoveNulls"
2465	// Trim ...
2466	Trim WebApplicationFirewallTransform = "Trim"
2467	// URLDecode ...
2468	URLDecode WebApplicationFirewallTransform = "UrlDecode"
2469	// URLEncode ...
2470	URLEncode WebApplicationFirewallTransform = "UrlEncode"
2471)
2472
2473// PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type.
2474func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform {
2475	return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, URLDecode, URLEncode}
2476}
2477
2478// AadAuthenticationParameters AAD Vpn authentication type related parameters.
2479type AadAuthenticationParameters struct {
2480	// AadTenant - AAD Vpn authentication parameter AAD tenant.
2481	AadTenant *string `json:"aadTenant,omitempty"`
2482	// AadAudience - AAD Vpn authentication parameter AAD audience.
2483	AadAudience *string `json:"aadAudience,omitempty"`
2484	// AadIssuer - AAD Vpn authentication parameter AAD issuer.
2485	AadIssuer *string `json:"aadIssuer,omitempty"`
2486}
2487
2488// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
2489// virtual network.
2490type AddressSpace struct {
2491	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
2492	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
2493}
2494
2495// ApplicationGateway application gateway resource.
2496type ApplicationGateway struct {
2497	autorest.Response `json:"-"`
2498	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
2499	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
2500	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
2501	Etag *string `json:"etag,omitempty"`
2502	// Zones - A list of availability zones denoting where the resource needs to come from.
2503	Zones *[]string `json:"zones,omitempty"`
2504	// Identity - The identity of the application gateway, if configured.
2505	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
2506	// ID - Resource ID.
2507	ID *string `json:"id,omitempty"`
2508	// Name - READ-ONLY; Resource name.
2509	Name *string `json:"name,omitempty"`
2510	// Type - READ-ONLY; Resource type.
2511	Type *string `json:"type,omitempty"`
2512	// Location - Resource location.
2513	Location *string `json:"location,omitempty"`
2514	// Tags - Resource tags.
2515	Tags map[string]*string `json:"tags"`
2516}
2517
2518// MarshalJSON is the custom marshaler for ApplicationGateway.
2519func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
2520	objectMap := make(map[string]interface{})
2521	if ag.ApplicationGatewayPropertiesFormat != nil {
2522		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
2523	}
2524	if ag.Zones != nil {
2525		objectMap["zones"] = ag.Zones
2526	}
2527	if ag.Identity != nil {
2528		objectMap["identity"] = ag.Identity
2529	}
2530	if ag.ID != nil {
2531		objectMap["id"] = ag.ID
2532	}
2533	if ag.Location != nil {
2534		objectMap["location"] = ag.Location
2535	}
2536	if ag.Tags != nil {
2537		objectMap["tags"] = ag.Tags
2538	}
2539	return json.Marshal(objectMap)
2540}
2541
2542// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
2543func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
2544	var m map[string]*json.RawMessage
2545	err := json.Unmarshal(body, &m)
2546	if err != nil {
2547		return err
2548	}
2549	for k, v := range m {
2550		switch k {
2551		case "properties":
2552			if v != nil {
2553				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
2554				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
2555				if err != nil {
2556					return err
2557				}
2558				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
2559			}
2560		case "etag":
2561			if v != nil {
2562				var etag string
2563				err = json.Unmarshal(*v, &etag)
2564				if err != nil {
2565					return err
2566				}
2567				ag.Etag = &etag
2568			}
2569		case "zones":
2570			if v != nil {
2571				var zones []string
2572				err = json.Unmarshal(*v, &zones)
2573				if err != nil {
2574					return err
2575				}
2576				ag.Zones = &zones
2577			}
2578		case "identity":
2579			if v != nil {
2580				var identity ManagedServiceIdentity
2581				err = json.Unmarshal(*v, &identity)
2582				if err != nil {
2583					return err
2584				}
2585				ag.Identity = &identity
2586			}
2587		case "id":
2588			if v != nil {
2589				var ID string
2590				err = json.Unmarshal(*v, &ID)
2591				if err != nil {
2592					return err
2593				}
2594				ag.ID = &ID
2595			}
2596		case "name":
2597			if v != nil {
2598				var name string
2599				err = json.Unmarshal(*v, &name)
2600				if err != nil {
2601					return err
2602				}
2603				ag.Name = &name
2604			}
2605		case "type":
2606			if v != nil {
2607				var typeVar string
2608				err = json.Unmarshal(*v, &typeVar)
2609				if err != nil {
2610					return err
2611				}
2612				ag.Type = &typeVar
2613			}
2614		case "location":
2615			if v != nil {
2616				var location string
2617				err = json.Unmarshal(*v, &location)
2618				if err != nil {
2619					return err
2620				}
2621				ag.Location = &location
2622			}
2623		case "tags":
2624			if v != nil {
2625				var tags map[string]*string
2626				err = json.Unmarshal(*v, &tags)
2627				if err != nil {
2628					return err
2629				}
2630				ag.Tags = tags
2631			}
2632		}
2633	}
2634
2635	return nil
2636}
2637
2638// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
2639type ApplicationGatewayAuthenticationCertificate struct {
2640	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
2641	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
2642	// Name - Name of the authentication certificate that is unique within an Application Gateway.
2643	Name *string `json:"name,omitempty"`
2644	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
2645	Etag *string `json:"etag,omitempty"`
2646	// Type - READ-ONLY; Type of the resource.
2647	Type *string `json:"type,omitempty"`
2648	// ID - Resource ID.
2649	ID *string `json:"id,omitempty"`
2650}
2651
2652// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
2653func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
2654	objectMap := make(map[string]interface{})
2655	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
2656		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
2657	}
2658	if agac.Name != nil {
2659		objectMap["name"] = agac.Name
2660	}
2661	if agac.ID != nil {
2662		objectMap["id"] = agac.ID
2663	}
2664	return json.Marshal(objectMap)
2665}
2666
2667// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
2668func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
2669	var m map[string]*json.RawMessage
2670	err := json.Unmarshal(body, &m)
2671	if err != nil {
2672		return err
2673	}
2674	for k, v := range m {
2675		switch k {
2676		case "properties":
2677			if v != nil {
2678				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
2679				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
2680				if err != nil {
2681					return err
2682				}
2683				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
2684			}
2685		case "name":
2686			if v != nil {
2687				var name string
2688				err = json.Unmarshal(*v, &name)
2689				if err != nil {
2690					return err
2691				}
2692				agac.Name = &name
2693			}
2694		case "etag":
2695			if v != nil {
2696				var etag string
2697				err = json.Unmarshal(*v, &etag)
2698				if err != nil {
2699					return err
2700				}
2701				agac.Etag = &etag
2702			}
2703		case "type":
2704			if v != nil {
2705				var typeVar string
2706				err = json.Unmarshal(*v, &typeVar)
2707				if err != nil {
2708					return err
2709				}
2710				agac.Type = &typeVar
2711			}
2712		case "id":
2713			if v != nil {
2714				var ID string
2715				err = json.Unmarshal(*v, &ID)
2716				if err != nil {
2717					return err
2718				}
2719				agac.ID = &ID
2720			}
2721		}
2722	}
2723
2724	return nil
2725}
2726
2727// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
2728// application gateway.
2729type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
2730	// Data - Certificate public data.
2731	Data *string `json:"data,omitempty"`
2732	// ProvisioningState - READ-ONLY; The provisioning state of the authentication certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2733	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2734}
2735
2736// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2737type ApplicationGatewayAutoscaleConfiguration struct {
2738	// MinCapacity - Lower bound on number of Application Gateway capacity.
2739	MinCapacity *int32 `json:"minCapacity,omitempty"`
2740	// MaxCapacity - Upper bound on number of Application Gateway capacity.
2741	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
2742}
2743
2744// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2745// call.
2746type ApplicationGatewayAvailableSslOptions struct {
2747	autorest.Response `json:"-"`
2748	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
2749	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2750	// ID - Resource ID.
2751	ID *string `json:"id,omitempty"`
2752	// Name - READ-ONLY; Resource name.
2753	Name *string `json:"name,omitempty"`
2754	// Type - READ-ONLY; Resource type.
2755	Type *string `json:"type,omitempty"`
2756	// Location - Resource location.
2757	Location *string `json:"location,omitempty"`
2758	// Tags - Resource tags.
2759	Tags map[string]*string `json:"tags"`
2760}
2761
2762// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2763func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2764	objectMap := make(map[string]interface{})
2765	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2766		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2767	}
2768	if agaso.ID != nil {
2769		objectMap["id"] = agaso.ID
2770	}
2771	if agaso.Location != nil {
2772		objectMap["location"] = agaso.Location
2773	}
2774	if agaso.Tags != nil {
2775		objectMap["tags"] = agaso.Tags
2776	}
2777	return json.Marshal(objectMap)
2778}
2779
2780// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2781func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2782	var m map[string]*json.RawMessage
2783	err := json.Unmarshal(body, &m)
2784	if err != nil {
2785		return err
2786	}
2787	for k, v := range m {
2788		switch k {
2789		case "properties":
2790			if v != nil {
2791				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2792				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2793				if err != nil {
2794					return err
2795				}
2796				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2797			}
2798		case "id":
2799			if v != nil {
2800				var ID string
2801				err = json.Unmarshal(*v, &ID)
2802				if err != nil {
2803					return err
2804				}
2805				agaso.ID = &ID
2806			}
2807		case "name":
2808			if v != nil {
2809				var name string
2810				err = json.Unmarshal(*v, &name)
2811				if err != nil {
2812					return err
2813				}
2814				agaso.Name = &name
2815			}
2816		case "type":
2817			if v != nil {
2818				var typeVar string
2819				err = json.Unmarshal(*v, &typeVar)
2820				if err != nil {
2821					return err
2822				}
2823				agaso.Type = &typeVar
2824			}
2825		case "location":
2826			if v != nil {
2827				var location string
2828				err = json.Unmarshal(*v, &location)
2829				if err != nil {
2830					return err
2831				}
2832				agaso.Location = &location
2833			}
2834		case "tags":
2835			if v != nil {
2836				var tags map[string]*string
2837				err = json.Unmarshal(*v, &tags)
2838				if err != nil {
2839					return err
2840				}
2841				agaso.Tags = tags
2842			}
2843		}
2844	}
2845
2846	return nil
2847}
2848
2849// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2850// ApplicationGatewayAvailableSslOptions.
2851type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2852	// PredefinedPolicies - List of available Ssl predefined policy.
2853	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2854	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2855	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2856	// AvailableCipherSuites - List of available Ssl cipher suites.
2857	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2858	// AvailableProtocols - List of available Ssl protocols.
2859	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2860}
2861
2862// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2863// service call.
2864type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2865	autorest.Response `json:"-"`
2866	// Value - List of available Ssl predefined policy.
2867	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2868	// NextLink - URL to get the next set of results.
2869	NextLink *string `json:"nextLink,omitempty"`
2870}
2871
2872// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2873// ApplicationGatewaySslPredefinedPolicy values.
2874type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2875	i    int
2876	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2877}
2878
2879// NextWithContext advances to the next value.  If there was an error making
2880// the request the iterator does not advance and the error is returned.
2881func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2882	if tracing.IsEnabled() {
2883		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2884		defer func() {
2885			sc := -1
2886			if iter.Response().Response.Response != nil {
2887				sc = iter.Response().Response.Response.StatusCode
2888			}
2889			tracing.EndSpan(ctx, sc, err)
2890		}()
2891	}
2892	iter.i++
2893	if iter.i < len(iter.page.Values()) {
2894		return nil
2895	}
2896	err = iter.page.NextWithContext(ctx)
2897	if err != nil {
2898		iter.i--
2899		return err
2900	}
2901	iter.i = 0
2902	return nil
2903}
2904
2905// Next advances to the next value.  If there was an error making
2906// the request the iterator does not advance and the error is returned.
2907// Deprecated: Use NextWithContext() instead.
2908func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2909	return iter.NextWithContext(context.Background())
2910}
2911
2912// NotDone returns true if the enumeration should be started or is not yet complete.
2913func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2914	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2915}
2916
2917// Response returns the raw server response from the last page request.
2918func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2919	return iter.page.Response()
2920}
2921
2922// Value returns the current value or a zero-initialized value if the
2923// iterator has advanced beyond the end of the collection.
2924func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2925	if !iter.page.NotDone() {
2926		return ApplicationGatewaySslPredefinedPolicy{}
2927	}
2928	return iter.page.Values()[iter.i]
2929}
2930
2931// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2932func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2933	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2934}
2935
2936// IsEmpty returns true if the ListResult contains no values.
2937func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2938	return agaspp.Value == nil || len(*agaspp.Value) == 0
2939}
2940
2941// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2942// It returns nil if no more results exist.
2943func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2944	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2945		return nil, nil
2946	}
2947	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2948		autorest.AsJSON(),
2949		autorest.AsGet(),
2950		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2951}
2952
2953// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2954// ApplicationGatewaySslPredefinedPolicy values.
2955type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2956	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2957	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2958}
2959
2960// NextWithContext advances to the next page of values.  If there was an error making
2961// the request the page does not advance and the error is returned.
2962func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2963	if tracing.IsEnabled() {
2964		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2965		defer func() {
2966			sc := -1
2967			if page.Response().Response.Response != nil {
2968				sc = page.Response().Response.Response.StatusCode
2969			}
2970			tracing.EndSpan(ctx, sc, err)
2971		}()
2972	}
2973	next, err := page.fn(ctx, page.agaspp)
2974	if err != nil {
2975		return err
2976	}
2977	page.agaspp = next
2978	return nil
2979}
2980
2981// Next advances to the next page of values.  If there was an error making
2982// the request the page does not advance and the error is returned.
2983// Deprecated: Use NextWithContext() instead.
2984func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2985	return page.NextWithContext(context.Background())
2986}
2987
2988// NotDone returns true if the page enumeration should be started or is not yet complete.
2989func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2990	return !page.agaspp.IsEmpty()
2991}
2992
2993// Response returns the raw server response from the last page request.
2994func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2995	return page.agaspp
2996}
2997
2998// Values returns the slice of values for the current page or nil if there are no values.
2999func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
3000	if page.agaspp.IsEmpty() {
3001		return nil
3002	}
3003	return *page.agaspp.Value
3004}
3005
3006// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
3007func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
3008	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
3009}
3010
3011// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
3012// service call.
3013type ApplicationGatewayAvailableWafRuleSetsResult struct {
3014	autorest.Response `json:"-"`
3015	// Value - The list of application gateway rule sets.
3016	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
3017}
3018
3019// ApplicationGatewayBackendAddress backend address of an application gateway.
3020type ApplicationGatewayBackendAddress struct {
3021	// Fqdn - Fully qualified domain name (FQDN).
3022	Fqdn *string `json:"fqdn,omitempty"`
3023	// IPAddress - IP address.
3024	IPAddress *string `json:"ipAddress,omitempty"`
3025}
3026
3027// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
3028type ApplicationGatewayBackendAddressPool struct {
3029	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
3030	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
3031	// Name - Name of the backend address pool that is unique within an Application Gateway.
3032	Name *string `json:"name,omitempty"`
3033	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3034	Etag *string `json:"etag,omitempty"`
3035	// Type - READ-ONLY; Type of the resource.
3036	Type *string `json:"type,omitempty"`
3037	// ID - Resource ID.
3038	ID *string `json:"id,omitempty"`
3039}
3040
3041// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
3042func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
3043	objectMap := make(map[string]interface{})
3044	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
3045		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
3046	}
3047	if agbap.Name != nil {
3048		objectMap["name"] = agbap.Name
3049	}
3050	if agbap.ID != nil {
3051		objectMap["id"] = agbap.ID
3052	}
3053	return json.Marshal(objectMap)
3054}
3055
3056// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
3057func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
3058	var m map[string]*json.RawMessage
3059	err := json.Unmarshal(body, &m)
3060	if err != nil {
3061		return err
3062	}
3063	for k, v := range m {
3064		switch k {
3065		case "properties":
3066			if v != nil {
3067				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
3068				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
3069				if err != nil {
3070					return err
3071				}
3072				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
3073			}
3074		case "name":
3075			if v != nil {
3076				var name string
3077				err = json.Unmarshal(*v, &name)
3078				if err != nil {
3079					return err
3080				}
3081				agbap.Name = &name
3082			}
3083		case "etag":
3084			if v != nil {
3085				var etag string
3086				err = json.Unmarshal(*v, &etag)
3087				if err != nil {
3088					return err
3089				}
3090				agbap.Etag = &etag
3091			}
3092		case "type":
3093			if v != nil {
3094				var typeVar string
3095				err = json.Unmarshal(*v, &typeVar)
3096				if err != nil {
3097					return err
3098				}
3099				agbap.Type = &typeVar
3100			}
3101		case "id":
3102			if v != nil {
3103				var ID string
3104				err = json.Unmarshal(*v, &ID)
3105				if err != nil {
3106					return err
3107				}
3108				agbap.ID = &ID
3109			}
3110		}
3111	}
3112
3113	return nil
3114}
3115
3116// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
3117// application gateway.
3118type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
3119	// BackendIPConfigurations - READ-ONLY; Collection of references to IPs defined in network interfaces.
3120	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
3121	// BackendAddresses - Backend addresses.
3122	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
3123	// ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3124	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3125}
3126
3127// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
3128type ApplicationGatewayBackendHealth struct {
3129	autorest.Response `json:"-"`
3130	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
3131	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
3132}
3133
3134// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
3135type ApplicationGatewayBackendHealthHTTPSettings struct {
3136	// BackendHTTPSettings - Reference to an ApplicationGatewayBackendHttpSettings resource.
3137	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
3138	// Servers - List of ApplicationGatewayBackendHealthServer resources.
3139	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
3140}
3141
3142// ApplicationGatewayBackendHealthOnDemand result of on demand test probe.
3143type ApplicationGatewayBackendHealthOnDemand struct {
3144	autorest.Response `json:"-"`
3145	// BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource.
3146	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
3147	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
3148	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
3149}
3150
3151// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
3152type ApplicationGatewayBackendHealthPool struct {
3153	// BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource.
3154	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
3155	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
3156	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
3157}
3158
3159// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
3160type ApplicationGatewayBackendHealthServer struct {
3161	// Address - IP address or FQDN of backend server.
3162	Address *string `json:"address,omitempty"`
3163	// IPConfiguration - Reference to IP configuration of backend server.
3164	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
3165	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
3166	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
3167	// HealthProbeLog - Health Probe Log.
3168	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
3169}
3170
3171// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
3172type ApplicationGatewayBackendHTTPSettings struct {
3173	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
3174	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
3175	// Name - Name of the backend http settings that is unique within an Application Gateway.
3176	Name *string `json:"name,omitempty"`
3177	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3178	Etag *string `json:"etag,omitempty"`
3179	// Type - READ-ONLY; Type of the resource.
3180	Type *string `json:"type,omitempty"`
3181	// ID - Resource ID.
3182	ID *string `json:"id,omitempty"`
3183}
3184
3185// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
3186func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
3187	objectMap := make(map[string]interface{})
3188	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
3189		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
3190	}
3191	if agbhs.Name != nil {
3192		objectMap["name"] = agbhs.Name
3193	}
3194	if agbhs.ID != nil {
3195		objectMap["id"] = agbhs.ID
3196	}
3197	return json.Marshal(objectMap)
3198}
3199
3200// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
3201func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
3202	var m map[string]*json.RawMessage
3203	err := json.Unmarshal(body, &m)
3204	if err != nil {
3205		return err
3206	}
3207	for k, v := range m {
3208		switch k {
3209		case "properties":
3210			if v != nil {
3211				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
3212				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
3213				if err != nil {
3214					return err
3215				}
3216				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
3217			}
3218		case "name":
3219			if v != nil {
3220				var name string
3221				err = json.Unmarshal(*v, &name)
3222				if err != nil {
3223					return err
3224				}
3225				agbhs.Name = &name
3226			}
3227		case "etag":
3228			if v != nil {
3229				var etag string
3230				err = json.Unmarshal(*v, &etag)
3231				if err != nil {
3232					return err
3233				}
3234				agbhs.Etag = &etag
3235			}
3236		case "type":
3237			if v != nil {
3238				var typeVar string
3239				err = json.Unmarshal(*v, &typeVar)
3240				if err != nil {
3241					return err
3242				}
3243				agbhs.Type = &typeVar
3244			}
3245		case "id":
3246			if v != nil {
3247				var ID string
3248				err = json.Unmarshal(*v, &ID)
3249				if err != nil {
3250					return err
3251				}
3252				agbhs.ID = &ID
3253			}
3254		}
3255	}
3256
3257	return nil
3258}
3259
3260// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
3261// application gateway.
3262type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
3263	// Port - The destination port on the backend.
3264	Port *int32 `json:"port,omitempty"`
3265	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
3266	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3267	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
3268	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
3269	// RequestTimeout - Request timeout in seconds. Application Gateway will fail the request if response is not received within RequestTimeout. Acceptable values are from 1 second to 86400 seconds.
3270	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
3271	// Probe - Probe resource of an application gateway.
3272	Probe *SubResource `json:"probe,omitempty"`
3273	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
3274	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
3275	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
3276	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
3277	// ConnectionDraining - Connection draining of the backend http settings resource.
3278	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
3279	// HostName - Host header to be sent to the backend servers.
3280	HostName *string `json:"hostName,omitempty"`
3281	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
3282	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
3283	// AffinityCookieName - Cookie name to use for the affinity cookie.
3284	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
3285	// ProbeEnabled - Whether the probe is enabled. Default value is false.
3286	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
3287	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
3288	Path *string `json:"path,omitempty"`
3289	// ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3290	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3291}
3292
3293// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
3294// be active for a specified time after the backend server got removed from the configuration.
3295type ApplicationGatewayConnectionDraining struct {
3296	// Enabled - Whether connection draining is enabled or not.
3297	Enabled *bool `json:"enabled,omitempty"`
3298	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
3299	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
3300}
3301
3302// ApplicationGatewayCustomError customer error of an application gateway.
3303type ApplicationGatewayCustomError struct {
3304	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
3305	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
3306	// CustomErrorPageURL - Error page URL of the application gateway customer error.
3307	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
3308}
3309
3310// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
3311// rule group.
3312type ApplicationGatewayFirewallDisabledRuleGroup struct {
3313	// RuleGroupName - The name of the rule group that will be disabled.
3314	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3315	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
3316	Rules *[]int32 `json:"rules,omitempty"`
3317}
3318
3319// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
3320// check.
3321type ApplicationGatewayFirewallExclusion struct {
3322	// MatchVariable - The variable to be excluded.
3323	MatchVariable *string `json:"matchVariable,omitempty"`
3324	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
3325	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
3326	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
3327	Selector *string `json:"selector,omitempty"`
3328}
3329
3330// ApplicationGatewayFirewallRule a web application firewall rule.
3331type ApplicationGatewayFirewallRule struct {
3332	// RuleID - The identifier of the web application firewall rule.
3333	RuleID *int32 `json:"ruleId,omitempty"`
3334	// Description - The description of the web application firewall rule.
3335	Description *string `json:"description,omitempty"`
3336}
3337
3338// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
3339type ApplicationGatewayFirewallRuleGroup struct {
3340	// RuleGroupName - The name of the web application firewall rule group.
3341	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3342	// Description - The description of the web application firewall rule group.
3343	Description *string `json:"description,omitempty"`
3344	// Rules - The rules of the web application firewall rule group.
3345	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
3346}
3347
3348// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
3349type ApplicationGatewayFirewallRuleSet struct {
3350	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
3351	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
3352	// ID - Resource ID.
3353	ID *string `json:"id,omitempty"`
3354	// Name - READ-ONLY; Resource name.
3355	Name *string `json:"name,omitempty"`
3356	// Type - READ-ONLY; Resource type.
3357	Type *string `json:"type,omitempty"`
3358	// Location - Resource location.
3359	Location *string `json:"location,omitempty"`
3360	// Tags - Resource tags.
3361	Tags map[string]*string `json:"tags"`
3362}
3363
3364// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
3365func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
3366	objectMap := make(map[string]interface{})
3367	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
3368		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
3369	}
3370	if agfrs.ID != nil {
3371		objectMap["id"] = agfrs.ID
3372	}
3373	if agfrs.Location != nil {
3374		objectMap["location"] = agfrs.Location
3375	}
3376	if agfrs.Tags != nil {
3377		objectMap["tags"] = agfrs.Tags
3378	}
3379	return json.Marshal(objectMap)
3380}
3381
3382// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
3383func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
3384	var m map[string]*json.RawMessage
3385	err := json.Unmarshal(body, &m)
3386	if err != nil {
3387		return err
3388	}
3389	for k, v := range m {
3390		switch k {
3391		case "properties":
3392			if v != nil {
3393				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
3394				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
3395				if err != nil {
3396					return err
3397				}
3398				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
3399			}
3400		case "id":
3401			if v != nil {
3402				var ID string
3403				err = json.Unmarshal(*v, &ID)
3404				if err != nil {
3405					return err
3406				}
3407				agfrs.ID = &ID
3408			}
3409		case "name":
3410			if v != nil {
3411				var name string
3412				err = json.Unmarshal(*v, &name)
3413				if err != nil {
3414					return err
3415				}
3416				agfrs.Name = &name
3417			}
3418		case "type":
3419			if v != nil {
3420				var typeVar string
3421				err = json.Unmarshal(*v, &typeVar)
3422				if err != nil {
3423					return err
3424				}
3425				agfrs.Type = &typeVar
3426			}
3427		case "location":
3428			if v != nil {
3429				var location string
3430				err = json.Unmarshal(*v, &location)
3431				if err != nil {
3432					return err
3433				}
3434				agfrs.Location = &location
3435			}
3436		case "tags":
3437			if v != nil {
3438				var tags map[string]*string
3439				err = json.Unmarshal(*v, &tags)
3440				if err != nil {
3441					return err
3442				}
3443				agfrs.Tags = tags
3444			}
3445		}
3446	}
3447
3448	return nil
3449}
3450
3451// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
3452type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
3453	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall rule set. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3454	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3455	// RuleSetType - The type of the web application firewall rule set.
3456	RuleSetType *string `json:"ruleSetType,omitempty"`
3457	// RuleSetVersion - The version of the web application firewall rule set type.
3458	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
3459	// RuleGroups - The rule groups of the web application firewall rule set.
3460	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
3461}
3462
3463// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
3464type ApplicationGatewayFrontendIPConfiguration struct {
3465	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
3466	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3467	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
3468	Name *string `json:"name,omitempty"`
3469	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3470	Etag *string `json:"etag,omitempty"`
3471	// Type - READ-ONLY; Type of the resource.
3472	Type *string `json:"type,omitempty"`
3473	// ID - Resource ID.
3474	ID *string `json:"id,omitempty"`
3475}
3476
3477// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
3478func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
3479	objectMap := make(map[string]interface{})
3480	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
3481		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3482	}
3483	if agfic.Name != nil {
3484		objectMap["name"] = agfic.Name
3485	}
3486	if agfic.ID != nil {
3487		objectMap["id"] = agfic.ID
3488	}
3489	return json.Marshal(objectMap)
3490}
3491
3492// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
3493func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
3494	var m map[string]*json.RawMessage
3495	err := json.Unmarshal(body, &m)
3496	if err != nil {
3497		return err
3498	}
3499	for k, v := range m {
3500		switch k {
3501		case "properties":
3502			if v != nil {
3503				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3504				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
3505				if err != nil {
3506					return err
3507				}
3508				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
3509			}
3510		case "name":
3511			if v != nil {
3512				var name string
3513				err = json.Unmarshal(*v, &name)
3514				if err != nil {
3515					return err
3516				}
3517				agfic.Name = &name
3518			}
3519		case "etag":
3520			if v != nil {
3521				var etag string
3522				err = json.Unmarshal(*v, &etag)
3523				if err != nil {
3524					return err
3525				}
3526				agfic.Etag = &etag
3527			}
3528		case "type":
3529			if v != nil {
3530				var typeVar string
3531				err = json.Unmarshal(*v, &typeVar)
3532				if err != nil {
3533					return err
3534				}
3535				agfic.Type = &typeVar
3536			}
3537		case "id":
3538			if v != nil {
3539				var ID string
3540				err = json.Unmarshal(*v, &ID)
3541				if err != nil {
3542					return err
3543				}
3544				agfic.ID = &ID
3545			}
3546		}
3547	}
3548
3549	return nil
3550}
3551
3552// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
3553// application gateway.
3554type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
3555	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
3556	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
3557	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
3558	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
3559	// Subnet - Reference to the subnet resource.
3560	Subnet *SubResource `json:"subnet,omitempty"`
3561	// PublicIPAddress - Reference to the PublicIP resource.
3562	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
3563	// PrivateLinkConfiguration - Reference to the application gateway private link configuration.
3564	PrivateLinkConfiguration *SubResource `json:"privateLinkConfiguration,omitempty"`
3565	// ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3566	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3567}
3568
3569// ApplicationGatewayFrontendPort frontend port of an application gateway.
3570type ApplicationGatewayFrontendPort struct {
3571	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
3572	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
3573	// Name - Name of the frontend port that is unique within an Application Gateway.
3574	Name *string `json:"name,omitempty"`
3575	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3576	Etag *string `json:"etag,omitempty"`
3577	// Type - READ-ONLY; Type of the resource.
3578	Type *string `json:"type,omitempty"`
3579	// ID - Resource ID.
3580	ID *string `json:"id,omitempty"`
3581}
3582
3583// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
3584func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
3585	objectMap := make(map[string]interface{})
3586	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
3587		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
3588	}
3589	if agfp.Name != nil {
3590		objectMap["name"] = agfp.Name
3591	}
3592	if agfp.ID != nil {
3593		objectMap["id"] = agfp.ID
3594	}
3595	return json.Marshal(objectMap)
3596}
3597
3598// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
3599func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
3600	var m map[string]*json.RawMessage
3601	err := json.Unmarshal(body, &m)
3602	if err != nil {
3603		return err
3604	}
3605	for k, v := range m {
3606		switch k {
3607		case "properties":
3608			if v != nil {
3609				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
3610				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
3611				if err != nil {
3612					return err
3613				}
3614				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
3615			}
3616		case "name":
3617			if v != nil {
3618				var name string
3619				err = json.Unmarshal(*v, &name)
3620				if err != nil {
3621					return err
3622				}
3623				agfp.Name = &name
3624			}
3625		case "etag":
3626			if v != nil {
3627				var etag string
3628				err = json.Unmarshal(*v, &etag)
3629				if err != nil {
3630					return err
3631				}
3632				agfp.Etag = &etag
3633			}
3634		case "type":
3635			if v != nil {
3636				var typeVar string
3637				err = json.Unmarshal(*v, &typeVar)
3638				if err != nil {
3639					return err
3640				}
3641				agfp.Type = &typeVar
3642			}
3643		case "id":
3644			if v != nil {
3645				var ID string
3646				err = json.Unmarshal(*v, &ID)
3647				if err != nil {
3648					return err
3649				}
3650				agfp.ID = &ID
3651			}
3652		}
3653	}
3654
3655	return nil
3656}
3657
3658// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
3659type ApplicationGatewayFrontendPortPropertiesFormat struct {
3660	// Port - Frontend port.
3661	Port *int32 `json:"port,omitempty"`
3662	// ProvisioningState - READ-ONLY; The provisioning state of the frontend port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3663	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3664}
3665
3666// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
3667type ApplicationGatewayHeaderConfiguration struct {
3668	// HeaderName - Header name of the header configuration.
3669	HeaderName *string `json:"headerName,omitempty"`
3670	// HeaderValue - Header value of the header configuration.
3671	HeaderValue *string `json:"headerValue,omitempty"`
3672}
3673
3674// ApplicationGatewayHTTPListener http listener of an application gateway.
3675type ApplicationGatewayHTTPListener struct {
3676	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
3677	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
3678	// Name - Name of the HTTP listener that is unique within an Application Gateway.
3679	Name *string `json:"name,omitempty"`
3680	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3681	Etag *string `json:"etag,omitempty"`
3682	// Type - READ-ONLY; Type of the resource.
3683	Type *string `json:"type,omitempty"`
3684	// ID - Resource ID.
3685	ID *string `json:"id,omitempty"`
3686}
3687
3688// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
3689func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
3690	objectMap := make(map[string]interface{})
3691	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
3692		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
3693	}
3694	if aghl.Name != nil {
3695		objectMap["name"] = aghl.Name
3696	}
3697	if aghl.ID != nil {
3698		objectMap["id"] = aghl.ID
3699	}
3700	return json.Marshal(objectMap)
3701}
3702
3703// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
3704func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
3705	var m map[string]*json.RawMessage
3706	err := json.Unmarshal(body, &m)
3707	if err != nil {
3708		return err
3709	}
3710	for k, v := range m {
3711		switch k {
3712		case "properties":
3713			if v != nil {
3714				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
3715				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
3716				if err != nil {
3717					return err
3718				}
3719				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
3720			}
3721		case "name":
3722			if v != nil {
3723				var name string
3724				err = json.Unmarshal(*v, &name)
3725				if err != nil {
3726					return err
3727				}
3728				aghl.Name = &name
3729			}
3730		case "etag":
3731			if v != nil {
3732				var etag string
3733				err = json.Unmarshal(*v, &etag)
3734				if err != nil {
3735					return err
3736				}
3737				aghl.Etag = &etag
3738			}
3739		case "type":
3740			if v != nil {
3741				var typeVar string
3742				err = json.Unmarshal(*v, &typeVar)
3743				if err != nil {
3744					return err
3745				}
3746				aghl.Type = &typeVar
3747			}
3748		case "id":
3749			if v != nil {
3750				var ID string
3751				err = json.Unmarshal(*v, &ID)
3752				if err != nil {
3753					return err
3754				}
3755				aghl.ID = &ID
3756			}
3757		}
3758	}
3759
3760	return nil
3761}
3762
3763// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3764type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3765	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3766	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3767	// FrontendPort - Frontend port resource of an application gateway.
3768	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3769	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
3770	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3771	// HostName - Host name of HTTP listener.
3772	HostName *string `json:"hostName,omitempty"`
3773	// SslCertificate - SSL certificate resource of an application gateway.
3774	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3775	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3776	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3777	// ProvisioningState - READ-ONLY; The provisioning state of the HTTP listener resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3778	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3779	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3780	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3781	// FirewallPolicy - Reference to the FirewallPolicy resource.
3782	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
3783	// HostNames - List of Host names for HTTP Listener that allows special wildcard characters as well.
3784	HostNames *[]string `json:"hostNames,omitempty"`
3785}
3786
3787// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3788// private IP configuration is allowed.
3789type ApplicationGatewayIPConfiguration struct {
3790	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
3791	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3792	// Name - Name of the IP configuration that is unique within an Application Gateway.
3793	Name *string `json:"name,omitempty"`
3794	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
3795	Etag *string `json:"etag,omitempty"`
3796	// Type - READ-ONLY; Type of the resource.
3797	Type *string `json:"type,omitempty"`
3798	// ID - Resource ID.
3799	ID *string `json:"id,omitempty"`
3800}
3801
3802// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3803func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3804	objectMap := make(map[string]interface{})
3805	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3806		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3807	}
3808	if agic.Name != nil {
3809		objectMap["name"] = agic.Name
3810	}
3811	if agic.ID != nil {
3812		objectMap["id"] = agic.ID
3813	}
3814	return json.Marshal(objectMap)
3815}
3816
3817// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3818func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3819	var m map[string]*json.RawMessage
3820	err := json.Unmarshal(body, &m)
3821	if err != nil {
3822		return err
3823	}
3824	for k, v := range m {
3825		switch k {
3826		case "properties":
3827			if v != nil {
3828				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3829				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3830				if err != nil {
3831					return err
3832				}
3833				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3834			}
3835		case "name":
3836			if v != nil {
3837				var name string
3838				err = json.Unmarshal(*v, &name)
3839				if err != nil {
3840					return err
3841				}
3842				agic.Name = &name
3843			}
3844		case "etag":
3845			if v != nil {
3846				var etag string
3847				err = json.Unmarshal(*v, &etag)
3848				if err != nil {
3849					return err
3850				}
3851				agic.Etag = &etag
3852			}
3853		case "type":
3854			if v != nil {
3855				var typeVar string
3856				err = json.Unmarshal(*v, &typeVar)
3857				if err != nil {
3858					return err
3859				}
3860				agic.Type = &typeVar
3861			}
3862		case "id":
3863			if v != nil {
3864				var ID string
3865				err = json.Unmarshal(*v, &ID)
3866				if err != nil {
3867					return err
3868				}
3869				agic.ID = &ID
3870			}
3871		}
3872	}
3873
3874	return nil
3875}
3876
3877// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3878// gateway.
3879type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3880	// Subnet - Reference to the subnet resource. A subnet from where application gateway gets its private address.
3881	Subnet *SubResource `json:"subnet,omitempty"`
3882	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3883	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3884}
3885
3886// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3887type ApplicationGatewayListResult struct {
3888	autorest.Response `json:"-"`
3889	// Value - List of an application gateways in a resource group.
3890	Value *[]ApplicationGateway `json:"value,omitempty"`
3891	// NextLink - URL to get the next set of results.
3892	NextLink *string `json:"nextLink,omitempty"`
3893}
3894
3895// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3896type ApplicationGatewayListResultIterator struct {
3897	i    int
3898	page ApplicationGatewayListResultPage
3899}
3900
3901// NextWithContext advances to the next value.  If there was an error making
3902// the request the iterator does not advance and the error is returned.
3903func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3904	if tracing.IsEnabled() {
3905		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3906		defer func() {
3907			sc := -1
3908			if iter.Response().Response.Response != nil {
3909				sc = iter.Response().Response.Response.StatusCode
3910			}
3911			tracing.EndSpan(ctx, sc, err)
3912		}()
3913	}
3914	iter.i++
3915	if iter.i < len(iter.page.Values()) {
3916		return nil
3917	}
3918	err = iter.page.NextWithContext(ctx)
3919	if err != nil {
3920		iter.i--
3921		return err
3922	}
3923	iter.i = 0
3924	return nil
3925}
3926
3927// Next advances to the next value.  If there was an error making
3928// the request the iterator does not advance and the error is returned.
3929// Deprecated: Use NextWithContext() instead.
3930func (iter *ApplicationGatewayListResultIterator) Next() error {
3931	return iter.NextWithContext(context.Background())
3932}
3933
3934// NotDone returns true if the enumeration should be started or is not yet complete.
3935func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3936	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3937}
3938
3939// Response returns the raw server response from the last page request.
3940func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3941	return iter.page.Response()
3942}
3943
3944// Value returns the current value or a zero-initialized value if the
3945// iterator has advanced beyond the end of the collection.
3946func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3947	if !iter.page.NotDone() {
3948		return ApplicationGateway{}
3949	}
3950	return iter.page.Values()[iter.i]
3951}
3952
3953// Creates a new instance of the ApplicationGatewayListResultIterator type.
3954func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3955	return ApplicationGatewayListResultIterator{page: page}
3956}
3957
3958// IsEmpty returns true if the ListResult contains no values.
3959func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3960	return aglr.Value == nil || len(*aglr.Value) == 0
3961}
3962
3963// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3964// It returns nil if no more results exist.
3965func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3966	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3967		return nil, nil
3968	}
3969	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3970		autorest.AsJSON(),
3971		autorest.AsGet(),
3972		autorest.WithBaseURL(to.String(aglr.NextLink)))
3973}
3974
3975// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3976type ApplicationGatewayListResultPage struct {
3977	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3978	aglr ApplicationGatewayListResult
3979}
3980
3981// NextWithContext advances to the next page of values.  If there was an error making
3982// the request the page does not advance and the error is returned.
3983func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3984	if tracing.IsEnabled() {
3985		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3986		defer func() {
3987			sc := -1
3988			if page.Response().Response.Response != nil {
3989				sc = page.Response().Response.Response.StatusCode
3990			}
3991			tracing.EndSpan(ctx, sc, err)
3992		}()
3993	}
3994	next, err := page.fn(ctx, page.aglr)
3995	if err != nil {
3996		return err
3997	}
3998	page.aglr = next
3999	return nil
4000}
4001
4002// Next advances to the next page of values.  If there was an error making
4003// the request the page does not advance and the error is returned.
4004// Deprecated: Use NextWithContext() instead.
4005func (page *ApplicationGatewayListResultPage) Next() error {
4006	return page.NextWithContext(context.Background())
4007}
4008
4009// NotDone returns true if the page enumeration should be started or is not yet complete.
4010func (page ApplicationGatewayListResultPage) NotDone() bool {
4011	return !page.aglr.IsEmpty()
4012}
4013
4014// Response returns the raw server response from the last page request.
4015func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
4016	return page.aglr
4017}
4018
4019// Values returns the slice of values for the current page or nil if there are no values.
4020func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
4021	if page.aglr.IsEmpty() {
4022		return nil
4023	}
4024	return *page.aglr.Value
4025}
4026
4027// Creates a new instance of the ApplicationGatewayListResultPage type.
4028func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
4029	return ApplicationGatewayListResultPage{fn: getNextPage}
4030}
4031
4032// ApplicationGatewayOnDemandProbe details of on demand test probe request.
4033type ApplicationGatewayOnDemandProbe struct {
4034	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
4035	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
4036	// Host - Host name to send the probe to.
4037	Host *string `json:"host,omitempty"`
4038	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
4039	Path *string `json:"path,omitempty"`
4040	// Timeout - The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
4041	Timeout *int32 `json:"timeout,omitempty"`
4042	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
4043	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
4044	// Match - Criterion for classifying a healthy probe response.
4045	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
4046	// BackendAddressPool - Reference to backend pool of application gateway to which probe request will be sent.
4047	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4048	// BackendHTTPSettings - Reference to backend http setting of application gateway to be used for test probe.
4049	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4050}
4051
4052// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
4053type ApplicationGatewayPathRule struct {
4054	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
4055	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
4056	// Name - Name of the path rule that is unique within an Application Gateway.
4057	Name *string `json:"name,omitempty"`
4058	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4059	Etag *string `json:"etag,omitempty"`
4060	// Type - READ-ONLY; Type of the resource.
4061	Type *string `json:"type,omitempty"`
4062	// ID - Resource ID.
4063	ID *string `json:"id,omitempty"`
4064}
4065
4066// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
4067func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
4068	objectMap := make(map[string]interface{})
4069	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
4070		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
4071	}
4072	if agpr.Name != nil {
4073		objectMap["name"] = agpr.Name
4074	}
4075	if agpr.ID != nil {
4076		objectMap["id"] = agpr.ID
4077	}
4078	return json.Marshal(objectMap)
4079}
4080
4081// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
4082func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
4083	var m map[string]*json.RawMessage
4084	err := json.Unmarshal(body, &m)
4085	if err != nil {
4086		return err
4087	}
4088	for k, v := range m {
4089		switch k {
4090		case "properties":
4091			if v != nil {
4092				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
4093				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
4094				if err != nil {
4095					return err
4096				}
4097				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
4098			}
4099		case "name":
4100			if v != nil {
4101				var name string
4102				err = json.Unmarshal(*v, &name)
4103				if err != nil {
4104					return err
4105				}
4106				agpr.Name = &name
4107			}
4108		case "etag":
4109			if v != nil {
4110				var etag string
4111				err = json.Unmarshal(*v, &etag)
4112				if err != nil {
4113					return err
4114				}
4115				agpr.Etag = &etag
4116			}
4117		case "type":
4118			if v != nil {
4119				var typeVar string
4120				err = json.Unmarshal(*v, &typeVar)
4121				if err != nil {
4122					return err
4123				}
4124				agpr.Type = &typeVar
4125			}
4126		case "id":
4127			if v != nil {
4128				var ID string
4129				err = json.Unmarshal(*v, &ID)
4130				if err != nil {
4131					return err
4132				}
4133				agpr.ID = &ID
4134			}
4135		}
4136	}
4137
4138	return nil
4139}
4140
4141// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
4142type ApplicationGatewayPathRulePropertiesFormat struct {
4143	// Paths - Path rules of URL path map.
4144	Paths *[]string `json:"paths,omitempty"`
4145	// BackendAddressPool - Backend address pool resource of URL path map path rule.
4146	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4147	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
4148	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4149	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
4150	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4151	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
4152	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4153	// ProvisioningState - READ-ONLY; The provisioning state of the path rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4154	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4155	// FirewallPolicy - Reference to the FirewallPolicy resource.
4156	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
4157}
4158
4159// ApplicationGatewayPrivateEndpointConnection private Endpoint connection on an application gateway.
4160type ApplicationGatewayPrivateEndpointConnection struct {
4161	autorest.Response `json:"-"`
4162	// ApplicationGatewayPrivateEndpointConnectionProperties - Properties of the application gateway private endpoint connection.
4163	*ApplicationGatewayPrivateEndpointConnectionProperties `json:"properties,omitempty"`
4164	// Name - Name of the private endpoint connection on an application gateway.
4165	Name *string `json:"name,omitempty"`
4166	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4167	Etag *string `json:"etag,omitempty"`
4168	// Type - READ-ONLY; Type of the resource.
4169	Type *string `json:"type,omitempty"`
4170	// ID - Resource ID.
4171	ID *string `json:"id,omitempty"`
4172}
4173
4174// MarshalJSON is the custom marshaler for ApplicationGatewayPrivateEndpointConnection.
4175func (agpec ApplicationGatewayPrivateEndpointConnection) MarshalJSON() ([]byte, error) {
4176	objectMap := make(map[string]interface{})
4177	if agpec.ApplicationGatewayPrivateEndpointConnectionProperties != nil {
4178		objectMap["properties"] = agpec.ApplicationGatewayPrivateEndpointConnectionProperties
4179	}
4180	if agpec.Name != nil {
4181		objectMap["name"] = agpec.Name
4182	}
4183	if agpec.ID != nil {
4184		objectMap["id"] = agpec.ID
4185	}
4186	return json.Marshal(objectMap)
4187}
4188
4189// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPrivateEndpointConnection struct.
4190func (agpec *ApplicationGatewayPrivateEndpointConnection) UnmarshalJSON(body []byte) error {
4191	var m map[string]*json.RawMessage
4192	err := json.Unmarshal(body, &m)
4193	if err != nil {
4194		return err
4195	}
4196	for k, v := range m {
4197		switch k {
4198		case "properties":
4199			if v != nil {
4200				var applicationGatewayPrivateEndpointConnectionProperties ApplicationGatewayPrivateEndpointConnectionProperties
4201				err = json.Unmarshal(*v, &applicationGatewayPrivateEndpointConnectionProperties)
4202				if err != nil {
4203					return err
4204				}
4205				agpec.ApplicationGatewayPrivateEndpointConnectionProperties = &applicationGatewayPrivateEndpointConnectionProperties
4206			}
4207		case "name":
4208			if v != nil {
4209				var name string
4210				err = json.Unmarshal(*v, &name)
4211				if err != nil {
4212					return err
4213				}
4214				agpec.Name = &name
4215			}
4216		case "etag":
4217			if v != nil {
4218				var etag string
4219				err = json.Unmarshal(*v, &etag)
4220				if err != nil {
4221					return err
4222				}
4223				agpec.Etag = &etag
4224			}
4225		case "type":
4226			if v != nil {
4227				var typeVar string
4228				err = json.Unmarshal(*v, &typeVar)
4229				if err != nil {
4230					return err
4231				}
4232				agpec.Type = &typeVar
4233			}
4234		case "id":
4235			if v != nil {
4236				var ID string
4237				err = json.Unmarshal(*v, &ID)
4238				if err != nil {
4239					return err
4240				}
4241				agpec.ID = &ID
4242			}
4243		}
4244	}
4245
4246	return nil
4247}
4248
4249// ApplicationGatewayPrivateEndpointConnectionListResult response for
4250// ListApplicationGatewayPrivateEndpointConnection API service call. Gets all private endpoint connections
4251// for an application gateway.
4252type ApplicationGatewayPrivateEndpointConnectionListResult struct {
4253	autorest.Response `json:"-"`
4254	// Value - List of private endpoint connections on an application gateway.
4255	Value *[]ApplicationGatewayPrivateEndpointConnection `json:"value,omitempty"`
4256	// NextLink - URL to get the next set of results.
4257	NextLink *string `json:"nextLink,omitempty"`
4258}
4259
4260// ApplicationGatewayPrivateEndpointConnectionListResultIterator provides access to a complete listing of
4261// ApplicationGatewayPrivateEndpointConnection values.
4262type ApplicationGatewayPrivateEndpointConnectionListResultIterator struct {
4263	i    int
4264	page ApplicationGatewayPrivateEndpointConnectionListResultPage
4265}
4266
4267// NextWithContext advances to the next value.  If there was an error making
4268// the request the iterator does not advance and the error is returned.
4269func (iter *ApplicationGatewayPrivateEndpointConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
4270	if tracing.IsEnabled() {
4271		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayPrivateEndpointConnectionListResultIterator.NextWithContext")
4272		defer func() {
4273			sc := -1
4274			if iter.Response().Response.Response != nil {
4275				sc = iter.Response().Response.Response.StatusCode
4276			}
4277			tracing.EndSpan(ctx, sc, err)
4278		}()
4279	}
4280	iter.i++
4281	if iter.i < len(iter.page.Values()) {
4282		return nil
4283	}
4284	err = iter.page.NextWithContext(ctx)
4285	if err != nil {
4286		iter.i--
4287		return err
4288	}
4289	iter.i = 0
4290	return nil
4291}
4292
4293// Next advances to the next value.  If there was an error making
4294// the request the iterator does not advance and the error is returned.
4295// Deprecated: Use NextWithContext() instead.
4296func (iter *ApplicationGatewayPrivateEndpointConnectionListResultIterator) Next() error {
4297	return iter.NextWithContext(context.Background())
4298}
4299
4300// NotDone returns true if the enumeration should be started or is not yet complete.
4301func (iter ApplicationGatewayPrivateEndpointConnectionListResultIterator) NotDone() bool {
4302	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4303}
4304
4305// Response returns the raw server response from the last page request.
4306func (iter ApplicationGatewayPrivateEndpointConnectionListResultIterator) Response() ApplicationGatewayPrivateEndpointConnectionListResult {
4307	return iter.page.Response()
4308}
4309
4310// Value returns the current value or a zero-initialized value if the
4311// iterator has advanced beyond the end of the collection.
4312func (iter ApplicationGatewayPrivateEndpointConnectionListResultIterator) Value() ApplicationGatewayPrivateEndpointConnection {
4313	if !iter.page.NotDone() {
4314		return ApplicationGatewayPrivateEndpointConnection{}
4315	}
4316	return iter.page.Values()[iter.i]
4317}
4318
4319// Creates a new instance of the ApplicationGatewayPrivateEndpointConnectionListResultIterator type.
4320func NewApplicationGatewayPrivateEndpointConnectionListResultIterator(page ApplicationGatewayPrivateEndpointConnectionListResultPage) ApplicationGatewayPrivateEndpointConnectionListResultIterator {
4321	return ApplicationGatewayPrivateEndpointConnectionListResultIterator{page: page}
4322}
4323
4324// IsEmpty returns true if the ListResult contains no values.
4325func (agpeclr ApplicationGatewayPrivateEndpointConnectionListResult) IsEmpty() bool {
4326	return agpeclr.Value == nil || len(*agpeclr.Value) == 0
4327}
4328
4329// applicationGatewayPrivateEndpointConnectionListResultPreparer prepares a request to retrieve the next set of results.
4330// It returns nil if no more results exist.
4331func (agpeclr ApplicationGatewayPrivateEndpointConnectionListResult) applicationGatewayPrivateEndpointConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
4332	if agpeclr.NextLink == nil || len(to.String(agpeclr.NextLink)) < 1 {
4333		return nil, nil
4334	}
4335	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4336		autorest.AsJSON(),
4337		autorest.AsGet(),
4338		autorest.WithBaseURL(to.String(agpeclr.NextLink)))
4339}
4340
4341// ApplicationGatewayPrivateEndpointConnectionListResultPage contains a page of
4342// ApplicationGatewayPrivateEndpointConnection values.
4343type ApplicationGatewayPrivateEndpointConnectionListResultPage struct {
4344	fn      func(context.Context, ApplicationGatewayPrivateEndpointConnectionListResult) (ApplicationGatewayPrivateEndpointConnectionListResult, error)
4345	agpeclr ApplicationGatewayPrivateEndpointConnectionListResult
4346}
4347
4348// NextWithContext advances to the next page of values.  If there was an error making
4349// the request the page does not advance and the error is returned.
4350func (page *ApplicationGatewayPrivateEndpointConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
4351	if tracing.IsEnabled() {
4352		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayPrivateEndpointConnectionListResultPage.NextWithContext")
4353		defer func() {
4354			sc := -1
4355			if page.Response().Response.Response != nil {
4356				sc = page.Response().Response.Response.StatusCode
4357			}
4358			tracing.EndSpan(ctx, sc, err)
4359		}()
4360	}
4361	next, err := page.fn(ctx, page.agpeclr)
4362	if err != nil {
4363		return err
4364	}
4365	page.agpeclr = next
4366	return nil
4367}
4368
4369// Next advances to the next page of values.  If there was an error making
4370// the request the page does not advance and the error is returned.
4371// Deprecated: Use NextWithContext() instead.
4372func (page *ApplicationGatewayPrivateEndpointConnectionListResultPage) Next() error {
4373	return page.NextWithContext(context.Background())
4374}
4375
4376// NotDone returns true if the page enumeration should be started or is not yet complete.
4377func (page ApplicationGatewayPrivateEndpointConnectionListResultPage) NotDone() bool {
4378	return !page.agpeclr.IsEmpty()
4379}
4380
4381// Response returns the raw server response from the last page request.
4382func (page ApplicationGatewayPrivateEndpointConnectionListResultPage) Response() ApplicationGatewayPrivateEndpointConnectionListResult {
4383	return page.agpeclr
4384}
4385
4386// Values returns the slice of values for the current page or nil if there are no values.
4387func (page ApplicationGatewayPrivateEndpointConnectionListResultPage) Values() []ApplicationGatewayPrivateEndpointConnection {
4388	if page.agpeclr.IsEmpty() {
4389		return nil
4390	}
4391	return *page.agpeclr.Value
4392}
4393
4394// Creates a new instance of the ApplicationGatewayPrivateEndpointConnectionListResultPage type.
4395func NewApplicationGatewayPrivateEndpointConnectionListResultPage(getNextPage func(context.Context, ApplicationGatewayPrivateEndpointConnectionListResult) (ApplicationGatewayPrivateEndpointConnectionListResult, error)) ApplicationGatewayPrivateEndpointConnectionListResultPage {
4396	return ApplicationGatewayPrivateEndpointConnectionListResultPage{fn: getNextPage}
4397}
4398
4399// ApplicationGatewayPrivateEndpointConnectionProperties properties of Private Link Resource of an
4400// application gateway.
4401type ApplicationGatewayPrivateEndpointConnectionProperties struct {
4402	// PrivateEndpoint - READ-ONLY; The resource of private end point.
4403	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
4404	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
4405	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
4406	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway private endpoint connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4407	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4408	// LinkIdentifier - READ-ONLY; The consumer link id.
4409	LinkIdentifier *string `json:"linkIdentifier,omitempty"`
4410}
4411
4412// ApplicationGatewayPrivateEndpointConnectionsDeleteFuture an abstraction for monitoring and retrieving
4413// the results of a long-running operation.
4414type ApplicationGatewayPrivateEndpointConnectionsDeleteFuture struct {
4415	azure.Future
4416}
4417
4418// Result returns the result of the asynchronous operation.
4419// If the operation has not completed it will return an error.
4420func (future *ApplicationGatewayPrivateEndpointConnectionsDeleteFuture) Result(client ApplicationGatewayPrivateEndpointConnectionsClient) (ar autorest.Response, err error) {
4421	var done bool
4422	done, err = future.DoneWithContext(context.Background(), client)
4423	if err != nil {
4424		err = autorest.NewErrorWithError(err, "network.ApplicationGatewayPrivateEndpointConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
4425		return
4426	}
4427	if !done {
4428		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewayPrivateEndpointConnectionsDeleteFuture")
4429		return
4430	}
4431	ar.Response = future.Response()
4432	return
4433}
4434
4435// ApplicationGatewayPrivateEndpointConnectionsUpdateFuture an abstraction for monitoring and retrieving
4436// the results of a long-running operation.
4437type ApplicationGatewayPrivateEndpointConnectionsUpdateFuture struct {
4438	azure.Future
4439}
4440
4441// Result returns the result of the asynchronous operation.
4442// If the operation has not completed it will return an error.
4443func (future *ApplicationGatewayPrivateEndpointConnectionsUpdateFuture) Result(client ApplicationGatewayPrivateEndpointConnectionsClient) (agpec ApplicationGatewayPrivateEndpointConnection, err error) {
4444	var done bool
4445	done, err = future.DoneWithContext(context.Background(), client)
4446	if err != nil {
4447		err = autorest.NewErrorWithError(err, "network.ApplicationGatewayPrivateEndpointConnectionsUpdateFuture", "Result", future.Response(), "Polling failure")
4448		return
4449	}
4450	if !done {
4451		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewayPrivateEndpointConnectionsUpdateFuture")
4452		return
4453	}
4454	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4455	if agpec.Response.Response, err = future.GetResult(sender); err == nil && agpec.Response.Response.StatusCode != http.StatusNoContent {
4456		agpec, err = client.UpdateResponder(agpec.Response.Response)
4457		if err != nil {
4458			err = autorest.NewErrorWithError(err, "network.ApplicationGatewayPrivateEndpointConnectionsUpdateFuture", "Result", agpec.Response.Response, "Failure responding to request")
4459		}
4460	}
4461	return
4462}
4463
4464// ApplicationGatewayPrivateLinkConfiguration private Link Configuration on an application gateway.
4465type ApplicationGatewayPrivateLinkConfiguration struct {
4466	// ApplicationGatewayPrivateLinkConfigurationProperties - Properties of the application gateway private link configuration.
4467	*ApplicationGatewayPrivateLinkConfigurationProperties `json:"properties,omitempty"`
4468	// Name - Name of the private link configuration that is unique within an Application Gateway.
4469	Name *string `json:"name,omitempty"`
4470	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4471	Etag *string `json:"etag,omitempty"`
4472	// Type - READ-ONLY; Type of the resource.
4473	Type *string `json:"type,omitempty"`
4474	// ID - Resource ID.
4475	ID *string `json:"id,omitempty"`
4476}
4477
4478// MarshalJSON is the custom marshaler for ApplicationGatewayPrivateLinkConfiguration.
4479func (agplc ApplicationGatewayPrivateLinkConfiguration) MarshalJSON() ([]byte, error) {
4480	objectMap := make(map[string]interface{})
4481	if agplc.ApplicationGatewayPrivateLinkConfigurationProperties != nil {
4482		objectMap["properties"] = agplc.ApplicationGatewayPrivateLinkConfigurationProperties
4483	}
4484	if agplc.Name != nil {
4485		objectMap["name"] = agplc.Name
4486	}
4487	if agplc.ID != nil {
4488		objectMap["id"] = agplc.ID
4489	}
4490	return json.Marshal(objectMap)
4491}
4492
4493// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPrivateLinkConfiguration struct.
4494func (agplc *ApplicationGatewayPrivateLinkConfiguration) UnmarshalJSON(body []byte) error {
4495	var m map[string]*json.RawMessage
4496	err := json.Unmarshal(body, &m)
4497	if err != nil {
4498		return err
4499	}
4500	for k, v := range m {
4501		switch k {
4502		case "properties":
4503			if v != nil {
4504				var applicationGatewayPrivateLinkConfigurationProperties ApplicationGatewayPrivateLinkConfigurationProperties
4505				err = json.Unmarshal(*v, &applicationGatewayPrivateLinkConfigurationProperties)
4506				if err != nil {
4507					return err
4508				}
4509				agplc.ApplicationGatewayPrivateLinkConfigurationProperties = &applicationGatewayPrivateLinkConfigurationProperties
4510			}
4511		case "name":
4512			if v != nil {
4513				var name string
4514				err = json.Unmarshal(*v, &name)
4515				if err != nil {
4516					return err
4517				}
4518				agplc.Name = &name
4519			}
4520		case "etag":
4521			if v != nil {
4522				var etag string
4523				err = json.Unmarshal(*v, &etag)
4524				if err != nil {
4525					return err
4526				}
4527				agplc.Etag = &etag
4528			}
4529		case "type":
4530			if v != nil {
4531				var typeVar string
4532				err = json.Unmarshal(*v, &typeVar)
4533				if err != nil {
4534					return err
4535				}
4536				agplc.Type = &typeVar
4537			}
4538		case "id":
4539			if v != nil {
4540				var ID string
4541				err = json.Unmarshal(*v, &ID)
4542				if err != nil {
4543					return err
4544				}
4545				agplc.ID = &ID
4546			}
4547		}
4548	}
4549
4550	return nil
4551}
4552
4553// ApplicationGatewayPrivateLinkConfigurationProperties properties of private link configuration on an
4554// application gateway.
4555type ApplicationGatewayPrivateLinkConfigurationProperties struct {
4556	// IPConfigurations - An array of application gateway private link ip configurations.
4557	IPConfigurations *[]ApplicationGatewayPrivateLinkIPConfiguration `json:"ipConfigurations,omitempty"`
4558	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway private link configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4559	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4560}
4561
4562// ApplicationGatewayPrivateLinkIPConfiguration the application gateway private link ip configuration.
4563type ApplicationGatewayPrivateLinkIPConfiguration struct {
4564	// ApplicationGatewayPrivateLinkIPConfigurationProperties - Properties of an application gateway private link ip configuration.
4565	*ApplicationGatewayPrivateLinkIPConfigurationProperties `json:"properties,omitempty"`
4566	// Name - The name of application gateway private link ip configuration.
4567	Name *string `json:"name,omitempty"`
4568	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4569	Etag *string `json:"etag,omitempty"`
4570	// Type - READ-ONLY; The resource type.
4571	Type *string `json:"type,omitempty"`
4572	// ID - Resource ID.
4573	ID *string `json:"id,omitempty"`
4574}
4575
4576// MarshalJSON is the custom marshaler for ApplicationGatewayPrivateLinkIPConfiguration.
4577func (agplic ApplicationGatewayPrivateLinkIPConfiguration) MarshalJSON() ([]byte, error) {
4578	objectMap := make(map[string]interface{})
4579	if agplic.ApplicationGatewayPrivateLinkIPConfigurationProperties != nil {
4580		objectMap["properties"] = agplic.ApplicationGatewayPrivateLinkIPConfigurationProperties
4581	}
4582	if agplic.Name != nil {
4583		objectMap["name"] = agplic.Name
4584	}
4585	if agplic.ID != nil {
4586		objectMap["id"] = agplic.ID
4587	}
4588	return json.Marshal(objectMap)
4589}
4590
4591// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPrivateLinkIPConfiguration struct.
4592func (agplic *ApplicationGatewayPrivateLinkIPConfiguration) UnmarshalJSON(body []byte) error {
4593	var m map[string]*json.RawMessage
4594	err := json.Unmarshal(body, &m)
4595	if err != nil {
4596		return err
4597	}
4598	for k, v := range m {
4599		switch k {
4600		case "properties":
4601			if v != nil {
4602				var applicationGatewayPrivateLinkIPConfigurationProperties ApplicationGatewayPrivateLinkIPConfigurationProperties
4603				err = json.Unmarshal(*v, &applicationGatewayPrivateLinkIPConfigurationProperties)
4604				if err != nil {
4605					return err
4606				}
4607				agplic.ApplicationGatewayPrivateLinkIPConfigurationProperties = &applicationGatewayPrivateLinkIPConfigurationProperties
4608			}
4609		case "name":
4610			if v != nil {
4611				var name string
4612				err = json.Unmarshal(*v, &name)
4613				if err != nil {
4614					return err
4615				}
4616				agplic.Name = &name
4617			}
4618		case "etag":
4619			if v != nil {
4620				var etag string
4621				err = json.Unmarshal(*v, &etag)
4622				if err != nil {
4623					return err
4624				}
4625				agplic.Etag = &etag
4626			}
4627		case "type":
4628			if v != nil {
4629				var typeVar string
4630				err = json.Unmarshal(*v, &typeVar)
4631				if err != nil {
4632					return err
4633				}
4634				agplic.Type = &typeVar
4635			}
4636		case "id":
4637			if v != nil {
4638				var ID string
4639				err = json.Unmarshal(*v, &ID)
4640				if err != nil {
4641					return err
4642				}
4643				agplic.ID = &ID
4644			}
4645		}
4646	}
4647
4648	return nil
4649}
4650
4651// ApplicationGatewayPrivateLinkIPConfigurationProperties properties of an application gateway private link
4652// IP configuration.
4653type ApplicationGatewayPrivateLinkIPConfigurationProperties struct {
4654	// PrivateIPAddress - The private IP address of the IP configuration.
4655	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
4656	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
4657	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
4658	// Subnet - Reference to the subnet resource.
4659	Subnet *SubResource `json:"subnet,omitempty"`
4660	// Primary - Whether the ip configuration is primary or not.
4661	Primary *bool `json:"primary,omitempty"`
4662	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway private link IP configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4663	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4664}
4665
4666// ApplicationGatewayPrivateLinkResource privateLink Resource of an application gateway.
4667type ApplicationGatewayPrivateLinkResource struct {
4668	// ApplicationGatewayPrivateLinkResourceProperties - Properties of the application gateway private link resource.
4669	*ApplicationGatewayPrivateLinkResourceProperties `json:"properties,omitempty"`
4670	// Name - Name of the private link resource that is unique within an Application Gateway.
4671	Name *string `json:"name,omitempty"`
4672	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4673	Etag *string `json:"etag,omitempty"`
4674	// Type - READ-ONLY; Type of the resource.
4675	Type *string `json:"type,omitempty"`
4676	// ID - Resource ID.
4677	ID *string `json:"id,omitempty"`
4678}
4679
4680// MarshalJSON is the custom marshaler for ApplicationGatewayPrivateLinkResource.
4681func (agplr ApplicationGatewayPrivateLinkResource) MarshalJSON() ([]byte, error) {
4682	objectMap := make(map[string]interface{})
4683	if agplr.ApplicationGatewayPrivateLinkResourceProperties != nil {
4684		objectMap["properties"] = agplr.ApplicationGatewayPrivateLinkResourceProperties
4685	}
4686	if agplr.Name != nil {
4687		objectMap["name"] = agplr.Name
4688	}
4689	if agplr.ID != nil {
4690		objectMap["id"] = agplr.ID
4691	}
4692	return json.Marshal(objectMap)
4693}
4694
4695// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPrivateLinkResource struct.
4696func (agplr *ApplicationGatewayPrivateLinkResource) UnmarshalJSON(body []byte) error {
4697	var m map[string]*json.RawMessage
4698	err := json.Unmarshal(body, &m)
4699	if err != nil {
4700		return err
4701	}
4702	for k, v := range m {
4703		switch k {
4704		case "properties":
4705			if v != nil {
4706				var applicationGatewayPrivateLinkResourceProperties ApplicationGatewayPrivateLinkResourceProperties
4707				err = json.Unmarshal(*v, &applicationGatewayPrivateLinkResourceProperties)
4708				if err != nil {
4709					return err
4710				}
4711				agplr.ApplicationGatewayPrivateLinkResourceProperties = &applicationGatewayPrivateLinkResourceProperties
4712			}
4713		case "name":
4714			if v != nil {
4715				var name string
4716				err = json.Unmarshal(*v, &name)
4717				if err != nil {
4718					return err
4719				}
4720				agplr.Name = &name
4721			}
4722		case "etag":
4723			if v != nil {
4724				var etag string
4725				err = json.Unmarshal(*v, &etag)
4726				if err != nil {
4727					return err
4728				}
4729				agplr.Etag = &etag
4730			}
4731		case "type":
4732			if v != nil {
4733				var typeVar string
4734				err = json.Unmarshal(*v, &typeVar)
4735				if err != nil {
4736					return err
4737				}
4738				agplr.Type = &typeVar
4739			}
4740		case "id":
4741			if v != nil {
4742				var ID string
4743				err = json.Unmarshal(*v, &ID)
4744				if err != nil {
4745					return err
4746				}
4747				agplr.ID = &ID
4748			}
4749		}
4750	}
4751
4752	return nil
4753}
4754
4755// ApplicationGatewayPrivateLinkResourceListResult response for ListApplicationGatewayPrivateLinkResources
4756// API service call. Gets all private link resources for an application gateway.
4757type ApplicationGatewayPrivateLinkResourceListResult struct {
4758	autorest.Response `json:"-"`
4759	// Value - List of private link resources of an application gateway.
4760	Value *[]ApplicationGatewayPrivateLinkResource `json:"value,omitempty"`
4761	// NextLink - URL to get the next set of results.
4762	NextLink *string `json:"nextLink,omitempty"`
4763}
4764
4765// ApplicationGatewayPrivateLinkResourceListResultIterator provides access to a complete listing of
4766// ApplicationGatewayPrivateLinkResource values.
4767type ApplicationGatewayPrivateLinkResourceListResultIterator struct {
4768	i    int
4769	page ApplicationGatewayPrivateLinkResourceListResultPage
4770}
4771
4772// NextWithContext advances to the next value.  If there was an error making
4773// the request the iterator does not advance and the error is returned.
4774func (iter *ApplicationGatewayPrivateLinkResourceListResultIterator) NextWithContext(ctx context.Context) (err error) {
4775	if tracing.IsEnabled() {
4776		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayPrivateLinkResourceListResultIterator.NextWithContext")
4777		defer func() {
4778			sc := -1
4779			if iter.Response().Response.Response != nil {
4780				sc = iter.Response().Response.Response.StatusCode
4781			}
4782			tracing.EndSpan(ctx, sc, err)
4783		}()
4784	}
4785	iter.i++
4786	if iter.i < len(iter.page.Values()) {
4787		return nil
4788	}
4789	err = iter.page.NextWithContext(ctx)
4790	if err != nil {
4791		iter.i--
4792		return err
4793	}
4794	iter.i = 0
4795	return nil
4796}
4797
4798// Next advances to the next value.  If there was an error making
4799// the request the iterator does not advance and the error is returned.
4800// Deprecated: Use NextWithContext() instead.
4801func (iter *ApplicationGatewayPrivateLinkResourceListResultIterator) Next() error {
4802	return iter.NextWithContext(context.Background())
4803}
4804
4805// NotDone returns true if the enumeration should be started or is not yet complete.
4806func (iter ApplicationGatewayPrivateLinkResourceListResultIterator) NotDone() bool {
4807	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4808}
4809
4810// Response returns the raw server response from the last page request.
4811func (iter ApplicationGatewayPrivateLinkResourceListResultIterator) Response() ApplicationGatewayPrivateLinkResourceListResult {
4812	return iter.page.Response()
4813}
4814
4815// Value returns the current value or a zero-initialized value if the
4816// iterator has advanced beyond the end of the collection.
4817func (iter ApplicationGatewayPrivateLinkResourceListResultIterator) Value() ApplicationGatewayPrivateLinkResource {
4818	if !iter.page.NotDone() {
4819		return ApplicationGatewayPrivateLinkResource{}
4820	}
4821	return iter.page.Values()[iter.i]
4822}
4823
4824// Creates a new instance of the ApplicationGatewayPrivateLinkResourceListResultIterator type.
4825func NewApplicationGatewayPrivateLinkResourceListResultIterator(page ApplicationGatewayPrivateLinkResourceListResultPage) ApplicationGatewayPrivateLinkResourceListResultIterator {
4826	return ApplicationGatewayPrivateLinkResourceListResultIterator{page: page}
4827}
4828
4829// IsEmpty returns true if the ListResult contains no values.
4830func (agplrlr ApplicationGatewayPrivateLinkResourceListResult) IsEmpty() bool {
4831	return agplrlr.Value == nil || len(*agplrlr.Value) == 0
4832}
4833
4834// applicationGatewayPrivateLinkResourceListResultPreparer prepares a request to retrieve the next set of results.
4835// It returns nil if no more results exist.
4836func (agplrlr ApplicationGatewayPrivateLinkResourceListResult) applicationGatewayPrivateLinkResourceListResultPreparer(ctx context.Context) (*http.Request, error) {
4837	if agplrlr.NextLink == nil || len(to.String(agplrlr.NextLink)) < 1 {
4838		return nil, nil
4839	}
4840	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4841		autorest.AsJSON(),
4842		autorest.AsGet(),
4843		autorest.WithBaseURL(to.String(agplrlr.NextLink)))
4844}
4845
4846// ApplicationGatewayPrivateLinkResourceListResultPage contains a page of
4847// ApplicationGatewayPrivateLinkResource values.
4848type ApplicationGatewayPrivateLinkResourceListResultPage struct {
4849	fn      func(context.Context, ApplicationGatewayPrivateLinkResourceListResult) (ApplicationGatewayPrivateLinkResourceListResult, error)
4850	agplrlr ApplicationGatewayPrivateLinkResourceListResult
4851}
4852
4853// NextWithContext advances to the next page of values.  If there was an error making
4854// the request the page does not advance and the error is returned.
4855func (page *ApplicationGatewayPrivateLinkResourceListResultPage) NextWithContext(ctx context.Context) (err error) {
4856	if tracing.IsEnabled() {
4857		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayPrivateLinkResourceListResultPage.NextWithContext")
4858		defer func() {
4859			sc := -1
4860			if page.Response().Response.Response != nil {
4861				sc = page.Response().Response.Response.StatusCode
4862			}
4863			tracing.EndSpan(ctx, sc, err)
4864		}()
4865	}
4866	next, err := page.fn(ctx, page.agplrlr)
4867	if err != nil {
4868		return err
4869	}
4870	page.agplrlr = next
4871	return nil
4872}
4873
4874// Next advances to the next page of values.  If there was an error making
4875// the request the page does not advance and the error is returned.
4876// Deprecated: Use NextWithContext() instead.
4877func (page *ApplicationGatewayPrivateLinkResourceListResultPage) Next() error {
4878	return page.NextWithContext(context.Background())
4879}
4880
4881// NotDone returns true if the page enumeration should be started or is not yet complete.
4882func (page ApplicationGatewayPrivateLinkResourceListResultPage) NotDone() bool {
4883	return !page.agplrlr.IsEmpty()
4884}
4885
4886// Response returns the raw server response from the last page request.
4887func (page ApplicationGatewayPrivateLinkResourceListResultPage) Response() ApplicationGatewayPrivateLinkResourceListResult {
4888	return page.agplrlr
4889}
4890
4891// Values returns the slice of values for the current page or nil if there are no values.
4892func (page ApplicationGatewayPrivateLinkResourceListResultPage) Values() []ApplicationGatewayPrivateLinkResource {
4893	if page.agplrlr.IsEmpty() {
4894		return nil
4895	}
4896	return *page.agplrlr.Value
4897}
4898
4899// Creates a new instance of the ApplicationGatewayPrivateLinkResourceListResultPage type.
4900func NewApplicationGatewayPrivateLinkResourceListResultPage(getNextPage func(context.Context, ApplicationGatewayPrivateLinkResourceListResult) (ApplicationGatewayPrivateLinkResourceListResult, error)) ApplicationGatewayPrivateLinkResourceListResultPage {
4901	return ApplicationGatewayPrivateLinkResourceListResultPage{fn: getNextPage}
4902}
4903
4904// ApplicationGatewayPrivateLinkResourceProperties properties of a private link resource.
4905type ApplicationGatewayPrivateLinkResourceProperties struct {
4906	// GroupID - READ-ONLY; Group identifier of private link resource.
4907	GroupID *string `json:"groupId,omitempty"`
4908	// RequiredMembers - READ-ONLY; Required member names of private link resource.
4909	RequiredMembers *[]string `json:"requiredMembers,omitempty"`
4910	// RequiredZoneNames - Required DNS zone names of the the private link resource.
4911	RequiredZoneNames *[]string `json:"requiredZoneNames,omitempty"`
4912}
4913
4914// ApplicationGatewayProbe probe of the application gateway.
4915type ApplicationGatewayProbe struct {
4916	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
4917	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
4918	// Name - Name of the probe that is unique within an Application Gateway.
4919	Name *string `json:"name,omitempty"`
4920	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4921	Etag *string `json:"etag,omitempty"`
4922	// Type - READ-ONLY; Type of the resource.
4923	Type *string `json:"type,omitempty"`
4924	// ID - Resource ID.
4925	ID *string `json:"id,omitempty"`
4926}
4927
4928// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
4929func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
4930	objectMap := make(map[string]interface{})
4931	if agp.ApplicationGatewayProbePropertiesFormat != nil {
4932		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
4933	}
4934	if agp.Name != nil {
4935		objectMap["name"] = agp.Name
4936	}
4937	if agp.ID != nil {
4938		objectMap["id"] = agp.ID
4939	}
4940	return json.Marshal(objectMap)
4941}
4942
4943// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
4944func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
4945	var m map[string]*json.RawMessage
4946	err := json.Unmarshal(body, &m)
4947	if err != nil {
4948		return err
4949	}
4950	for k, v := range m {
4951		switch k {
4952		case "properties":
4953			if v != nil {
4954				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
4955				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
4956				if err != nil {
4957					return err
4958				}
4959				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
4960			}
4961		case "name":
4962			if v != nil {
4963				var name string
4964				err = json.Unmarshal(*v, &name)
4965				if err != nil {
4966					return err
4967				}
4968				agp.Name = &name
4969			}
4970		case "etag":
4971			if v != nil {
4972				var etag string
4973				err = json.Unmarshal(*v, &etag)
4974				if err != nil {
4975					return err
4976				}
4977				agp.Etag = &etag
4978			}
4979		case "type":
4980			if v != nil {
4981				var typeVar string
4982				err = json.Unmarshal(*v, &typeVar)
4983				if err != nil {
4984					return err
4985				}
4986				agp.Type = &typeVar
4987			}
4988		case "id":
4989			if v != nil {
4990				var ID string
4991				err = json.Unmarshal(*v, &ID)
4992				if err != nil {
4993					return err
4994				}
4995				agp.ID = &ID
4996			}
4997		}
4998	}
4999
5000	return nil
5001}
5002
5003// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match.
5004type ApplicationGatewayProbeHealthResponseMatch struct {
5005	// Body - Body that must be contained in the health response. Default value is empty.
5006	Body *string `json:"body,omitempty"`
5007	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
5008	StatusCodes *[]string `json:"statusCodes,omitempty"`
5009}
5010
5011// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
5012type ApplicationGatewayProbePropertiesFormat struct {
5013	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
5014	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
5015	// Host - Host name to send the probe to.
5016	Host *string `json:"host,omitempty"`
5017	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
5018	Path *string `json:"path,omitempty"`
5019	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
5020	Interval *int32 `json:"interval,omitempty"`
5021	// Timeout - The probe timeout in seconds. Probe marked as failed if valid response is not received with this timeout period. Acceptable values are from 1 second to 86400 seconds.
5022	Timeout *int32 `json:"timeout,omitempty"`
5023	// UnhealthyThreshold - The probe retry count. Backend server is marked down after consecutive probe failure count reaches UnhealthyThreshold. Acceptable values are from 1 second to 20.
5024	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
5025	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
5026	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
5027	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
5028	MinServers *int32 `json:"minServers,omitempty"`
5029	// Match - Criterion for classifying a healthy probe response.
5030	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
5031	// ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5032	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5033	// Port - Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from http settings will be used. This property is valid for Standard_v2 and WAF_v2 only.
5034	Port *int32 `json:"port,omitempty"`
5035}
5036
5037// ApplicationGatewayPropertiesFormat properties of the application gateway.
5038type ApplicationGatewayPropertiesFormat struct {
5039	// Sku - SKU of the application gateway resource.
5040	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
5041	// SslPolicy - SSL policy of the application gateway resource.
5042	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
5043	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
5044	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
5045	// GatewayIPConfigurations - Subnets of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5046	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
5047	// AuthenticationCertificates - Authentication certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5048	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
5049	// TrustedRootCertificates - Trusted Root certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5050	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
5051	// SslCertificates - SSL certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5052	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
5053	// FrontendIPConfigurations - Frontend IP addresses of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5054	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
5055	// FrontendPorts - Frontend ports of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5056	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
5057	// Probes - Probes of the application gateway resource.
5058	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
5059	// BackendAddressPools - Backend address pool of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5060	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
5061	// BackendHTTPSettingsCollection - Backend http settings of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5062	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
5063	// HTTPListeners - Http listeners of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5064	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
5065	// URLPathMaps - URL path map of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5066	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
5067	// RequestRoutingRules - Request routing rules of the application gateway resource.
5068	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
5069	// RewriteRuleSets - Rewrite rules for the application gateway resource.
5070	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
5071	// RedirectConfigurations - Redirect configurations of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
5072	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
5073	// WebApplicationFirewallConfiguration - Web application firewall configuration.
5074	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
5075	// FirewallPolicy - Reference to the FirewallPolicy resource.
5076	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
5077	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
5078	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
5079	// EnableFips - Whether FIPS is enabled on the application gateway resource.
5080	EnableFips *bool `json:"enableFips,omitempty"`
5081	// AutoscaleConfiguration - Autoscale Configuration.
5082	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
5083	// PrivateLinkConfigurations - PrivateLink configurations on application gateway.
5084	PrivateLinkConfigurations *[]ApplicationGatewayPrivateLinkConfiguration `json:"privateLinkConfigurations,omitempty"`
5085	// PrivateEndpointConnections - READ-ONLY; Private Endpoint connections on application gateway.
5086	PrivateEndpointConnections *[]ApplicationGatewayPrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
5087	// ResourceGUID - READ-ONLY; The resource GUID property of the application gateway resource.
5088	ResourceGUID *string `json:"resourceGuid,omitempty"`
5089	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5090	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5091	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
5092	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
5093	// ForceFirewallPolicyAssociation - If true, associates a firewall policy with an application gateway regardless whether the policy differs from the WAF Config.
5094	ForceFirewallPolicyAssociation *bool `json:"forceFirewallPolicyAssociation,omitempty"`
5095}
5096
5097// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
5098type ApplicationGatewayRedirectConfiguration struct {
5099	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
5100	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
5101	// Name - Name of the redirect configuration that is unique within an Application Gateway.
5102	Name *string `json:"name,omitempty"`
5103	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5104	Etag *string `json:"etag,omitempty"`
5105	// Type - READ-ONLY; Type of the resource.
5106	Type *string `json:"type,omitempty"`
5107	// ID - Resource ID.
5108	ID *string `json:"id,omitempty"`
5109}
5110
5111// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
5112func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
5113	objectMap := make(map[string]interface{})
5114	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
5115		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
5116	}
5117	if agrc.Name != nil {
5118		objectMap["name"] = agrc.Name
5119	}
5120	if agrc.ID != nil {
5121		objectMap["id"] = agrc.ID
5122	}
5123	return json.Marshal(objectMap)
5124}
5125
5126// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
5127func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
5128	var m map[string]*json.RawMessage
5129	err := json.Unmarshal(body, &m)
5130	if err != nil {
5131		return err
5132	}
5133	for k, v := range m {
5134		switch k {
5135		case "properties":
5136			if v != nil {
5137				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
5138				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
5139				if err != nil {
5140					return err
5141				}
5142				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
5143			}
5144		case "name":
5145			if v != nil {
5146				var name string
5147				err = json.Unmarshal(*v, &name)
5148				if err != nil {
5149					return err
5150				}
5151				agrc.Name = &name
5152			}
5153		case "etag":
5154			if v != nil {
5155				var etag string
5156				err = json.Unmarshal(*v, &etag)
5157				if err != nil {
5158					return err
5159				}
5160				agrc.Etag = &etag
5161			}
5162		case "type":
5163			if v != nil {
5164				var typeVar string
5165				err = json.Unmarshal(*v, &typeVar)
5166				if err != nil {
5167					return err
5168				}
5169				agrc.Type = &typeVar
5170			}
5171		case "id":
5172			if v != nil {
5173				var ID string
5174				err = json.Unmarshal(*v, &ID)
5175				if err != nil {
5176					return err
5177				}
5178				agrc.ID = &ID
5179			}
5180		}
5181	}
5182
5183	return nil
5184}
5185
5186// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
5187// application gateway.
5188type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
5189	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
5190	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
5191	// TargetListener - Reference to a listener to redirect the request to.
5192	TargetListener *SubResource `json:"targetListener,omitempty"`
5193	// TargetURL - Url to redirect the request to.
5194	TargetURL *string `json:"targetUrl,omitempty"`
5195	// IncludePath - Include path in the redirected url.
5196	IncludePath *bool `json:"includePath,omitempty"`
5197	// IncludeQueryString - Include query string in the redirected url.
5198	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
5199	// RequestRoutingRules - Request routing specifying redirect configuration.
5200	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
5201	// URLPathMaps - Url path maps specifying default redirect configuration.
5202	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
5203	// PathRules - Path rules specifying redirect configuration.
5204	PathRules *[]SubResource `json:"pathRules,omitempty"`
5205}
5206
5207// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
5208type ApplicationGatewayRequestRoutingRule struct {
5209	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
5210	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
5211	// Name - Name of the request routing rule that is unique within an Application Gateway.
5212	Name *string `json:"name,omitempty"`
5213	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5214	Etag *string `json:"etag,omitempty"`
5215	// Type - READ-ONLY; Type of the resource.
5216	Type *string `json:"type,omitempty"`
5217	// ID - Resource ID.
5218	ID *string `json:"id,omitempty"`
5219}
5220
5221// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
5222func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
5223	objectMap := make(map[string]interface{})
5224	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
5225		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
5226	}
5227	if agrrr.Name != nil {
5228		objectMap["name"] = agrrr.Name
5229	}
5230	if agrrr.ID != nil {
5231		objectMap["id"] = agrrr.ID
5232	}
5233	return json.Marshal(objectMap)
5234}
5235
5236// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
5237func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
5238	var m map[string]*json.RawMessage
5239	err := json.Unmarshal(body, &m)
5240	if err != nil {
5241		return err
5242	}
5243	for k, v := range m {
5244		switch k {
5245		case "properties":
5246			if v != nil {
5247				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
5248				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
5249				if err != nil {
5250					return err
5251				}
5252				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
5253			}
5254		case "name":
5255			if v != nil {
5256				var name string
5257				err = json.Unmarshal(*v, &name)
5258				if err != nil {
5259					return err
5260				}
5261				agrrr.Name = &name
5262			}
5263		case "etag":
5264			if v != nil {
5265				var etag string
5266				err = json.Unmarshal(*v, &etag)
5267				if err != nil {
5268					return err
5269				}
5270				agrrr.Etag = &etag
5271			}
5272		case "type":
5273			if v != nil {
5274				var typeVar string
5275				err = json.Unmarshal(*v, &typeVar)
5276				if err != nil {
5277					return err
5278				}
5279				agrrr.Type = &typeVar
5280			}
5281		case "id":
5282			if v != nil {
5283				var ID string
5284				err = json.Unmarshal(*v, &ID)
5285				if err != nil {
5286					return err
5287				}
5288				agrrr.ID = &ID
5289			}
5290		}
5291	}
5292
5293	return nil
5294}
5295
5296// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
5297// application gateway.
5298type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
5299	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
5300	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
5301	// Priority - Priority of the request routing rule.
5302	Priority *int32 `json:"priority,omitempty"`
5303	// BackendAddressPool - Backend address pool resource of the application gateway.
5304	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
5305	// BackendHTTPSettings - Backend http settings resource of the application gateway.
5306	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
5307	// HTTPListener - Http listener resource of the application gateway.
5308	HTTPListener *SubResource `json:"httpListener,omitempty"`
5309	// URLPathMap - URL path map resource of the application gateway.
5310	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
5311	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
5312	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
5313	// RedirectConfiguration - Redirect configuration resource of the application gateway.
5314	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
5315	// ProvisioningState - READ-ONLY; The provisioning state of the request routing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5316	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5317}
5318
5319// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
5320type ApplicationGatewayRewriteRule struct {
5321	// Name - Name of the rewrite rule that is unique within an Application Gateway.
5322	Name *string `json:"name,omitempty"`
5323	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
5324	RuleSequence *int32 `json:"ruleSequence,omitempty"`
5325	// Conditions - Conditions based on which the action set execution will be evaluated.
5326	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
5327	// ActionSet - Set of actions to be done as part of the rewrite Rule.
5328	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
5329}
5330
5331// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
5332type ApplicationGatewayRewriteRuleActionSet struct {
5333	// RequestHeaderConfigurations - Request Header Actions in the Action Set.
5334	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
5335	// ResponseHeaderConfigurations - Response Header Actions in the Action Set.
5336	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
5337	// URLConfiguration - Url Configuration Action in the Action Set.
5338	URLConfiguration *ApplicationGatewayURLConfiguration `json:"urlConfiguration,omitempty"`
5339}
5340
5341// ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
5342type ApplicationGatewayRewriteRuleCondition struct {
5343	// Variable - The condition parameter of the RewriteRuleCondition.
5344	Variable *string `json:"variable,omitempty"`
5345	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
5346	Pattern *string `json:"pattern,omitempty"`
5347	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
5348	IgnoreCase *bool `json:"ignoreCase,omitempty"`
5349	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
5350	Negate *bool `json:"negate,omitempty"`
5351}
5352
5353// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
5354type ApplicationGatewayRewriteRuleSet struct {
5355	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
5356	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
5357	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
5358	Name *string `json:"name,omitempty"`
5359	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5360	Etag *string `json:"etag,omitempty"`
5361	// ID - Resource ID.
5362	ID *string `json:"id,omitempty"`
5363}
5364
5365// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
5366func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
5367	objectMap := make(map[string]interface{})
5368	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
5369		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
5370	}
5371	if agrrs.Name != nil {
5372		objectMap["name"] = agrrs.Name
5373	}
5374	if agrrs.ID != nil {
5375		objectMap["id"] = agrrs.ID
5376	}
5377	return json.Marshal(objectMap)
5378}
5379
5380// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
5381func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
5382	var m map[string]*json.RawMessage
5383	err := json.Unmarshal(body, &m)
5384	if err != nil {
5385		return err
5386	}
5387	for k, v := range m {
5388		switch k {
5389		case "properties":
5390			if v != nil {
5391				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
5392				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
5393				if err != nil {
5394					return err
5395				}
5396				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
5397			}
5398		case "name":
5399			if v != nil {
5400				var name string
5401				err = json.Unmarshal(*v, &name)
5402				if err != nil {
5403					return err
5404				}
5405				agrrs.Name = &name
5406			}
5407		case "etag":
5408			if v != nil {
5409				var etag string
5410				err = json.Unmarshal(*v, &etag)
5411				if err != nil {
5412					return err
5413				}
5414				agrrs.Etag = &etag
5415			}
5416		case "id":
5417			if v != nil {
5418				var ID string
5419				err = json.Unmarshal(*v, &ID)
5420				if err != nil {
5421					return err
5422				}
5423				agrrs.ID = &ID
5424			}
5425		}
5426	}
5427
5428	return nil
5429}
5430
5431// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
5432// gateway.
5433type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
5434	// RewriteRules - Rewrite rules in the rewrite rule set.
5435	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
5436	// ProvisioningState - READ-ONLY; The provisioning state of the rewrite rule set resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5437	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5438}
5439
5440// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
5441// long-running operation.
5442type ApplicationGatewaysBackendHealthFuture struct {
5443	azure.Future
5444}
5445
5446// Result returns the result of the asynchronous operation.
5447// If the operation has not completed it will return an error.
5448func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
5449	var done bool
5450	done, err = future.DoneWithContext(context.Background(), client)
5451	if err != nil {
5452		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
5453		return
5454	}
5455	if !done {
5456		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
5457		return
5458	}
5459	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5460	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
5461		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
5462		if err != nil {
5463			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
5464		}
5465	}
5466	return
5467}
5468
5469// ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
5470// of a long-running operation.
5471type ApplicationGatewaysBackendHealthOnDemandFuture struct {
5472	azure.Future
5473}
5474
5475// Result returns the result of the asynchronous operation.
5476// If the operation has not completed it will return an error.
5477func (future *ApplicationGatewaysBackendHealthOnDemandFuture) Result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
5478	var done bool
5479	done, err = future.DoneWithContext(context.Background(), client)
5480	if err != nil {
5481		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
5482		return
5483	}
5484	if !done {
5485		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
5486		return
5487	}
5488	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5489	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
5490		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
5491		if err != nil {
5492			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
5493		}
5494	}
5495	return
5496}
5497
5498// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
5499// long-running operation.
5500type ApplicationGatewaysCreateOrUpdateFuture struct {
5501	azure.Future
5502}
5503
5504// Result returns the result of the asynchronous operation.
5505// If the operation has not completed it will return an error.
5506func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
5507	var done bool
5508	done, err = future.DoneWithContext(context.Background(), client)
5509	if err != nil {
5510		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5511		return
5512	}
5513	if !done {
5514		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
5515		return
5516	}
5517	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5518	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
5519		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
5520		if err != nil {
5521			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
5522		}
5523	}
5524	return
5525}
5526
5527// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
5528// long-running operation.
5529type ApplicationGatewaysDeleteFuture struct {
5530	azure.Future
5531}
5532
5533// Result returns the result of the asynchronous operation.
5534// If the operation has not completed it will return an error.
5535func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
5536	var done bool
5537	done, err = future.DoneWithContext(context.Background(), client)
5538	if err != nil {
5539		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
5540		return
5541	}
5542	if !done {
5543		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
5544		return
5545	}
5546	ar.Response = future.Response()
5547	return
5548}
5549
5550// ApplicationGatewaySku SKU of an application gateway.
5551type ApplicationGatewaySku struct {
5552	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
5553	Name ApplicationGatewaySkuName `json:"name,omitempty"`
5554	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
5555	Tier ApplicationGatewayTier `json:"tier,omitempty"`
5556	// Capacity - Capacity (instance count) of an application gateway.
5557	Capacity *int32 `json:"capacity,omitempty"`
5558}
5559
5560// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
5561type ApplicationGatewaySslCertificate struct {
5562	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
5563	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
5564	// Name - Name of the SSL certificate that is unique within an Application Gateway.
5565	Name *string `json:"name,omitempty"`
5566	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5567	Etag *string `json:"etag,omitempty"`
5568	// Type - READ-ONLY; Type of the resource.
5569	Type *string `json:"type,omitempty"`
5570	// ID - Resource ID.
5571	ID *string `json:"id,omitempty"`
5572}
5573
5574// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
5575func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
5576	objectMap := make(map[string]interface{})
5577	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
5578		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
5579	}
5580	if agsc.Name != nil {
5581		objectMap["name"] = agsc.Name
5582	}
5583	if agsc.ID != nil {
5584		objectMap["id"] = agsc.ID
5585	}
5586	return json.Marshal(objectMap)
5587}
5588
5589// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
5590func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
5591	var m map[string]*json.RawMessage
5592	err := json.Unmarshal(body, &m)
5593	if err != nil {
5594		return err
5595	}
5596	for k, v := range m {
5597		switch k {
5598		case "properties":
5599			if v != nil {
5600				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
5601				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
5602				if err != nil {
5603					return err
5604				}
5605				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
5606			}
5607		case "name":
5608			if v != nil {
5609				var name string
5610				err = json.Unmarshal(*v, &name)
5611				if err != nil {
5612					return err
5613				}
5614				agsc.Name = &name
5615			}
5616		case "etag":
5617			if v != nil {
5618				var etag string
5619				err = json.Unmarshal(*v, &etag)
5620				if err != nil {
5621					return err
5622				}
5623				agsc.Etag = &etag
5624			}
5625		case "type":
5626			if v != nil {
5627				var typeVar string
5628				err = json.Unmarshal(*v, &typeVar)
5629				if err != nil {
5630					return err
5631				}
5632				agsc.Type = &typeVar
5633			}
5634		case "id":
5635			if v != nil {
5636				var ID string
5637				err = json.Unmarshal(*v, &ID)
5638				if err != nil {
5639					return err
5640				}
5641				agsc.ID = &ID
5642			}
5643		}
5644	}
5645
5646	return nil
5647}
5648
5649// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
5650// gateway.
5651type ApplicationGatewaySslCertificatePropertiesFormat struct {
5652	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
5653	Data *string `json:"data,omitempty"`
5654	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
5655	Password *string `json:"password,omitempty"`
5656	// PublicCertData - READ-ONLY; Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
5657	PublicCertData *string `json:"publicCertData,omitempty"`
5658	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
5659	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
5660	// ProvisioningState - READ-ONLY; The provisioning state of the SSL certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5661	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5662}
5663
5664// ApplicationGatewaySslPolicy application Gateway Ssl policy.
5665type ApplicationGatewaySslPolicy struct {
5666	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
5667	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
5668	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
5669	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
5670	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
5671	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
5672	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
5673	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
5674	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
5675	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
5676}
5677
5678// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy.
5679type ApplicationGatewaySslPredefinedPolicy struct {
5680	autorest.Response `json:"-"`
5681	// Name - Name of the Ssl predefined policy.
5682	Name *string `json:"name,omitempty"`
5683	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
5684	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
5685	// ID - Resource ID.
5686	ID *string `json:"id,omitempty"`
5687}
5688
5689// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
5690func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
5691	objectMap := make(map[string]interface{})
5692	if agspp.Name != nil {
5693		objectMap["name"] = agspp.Name
5694	}
5695	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
5696		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
5697	}
5698	if agspp.ID != nil {
5699		objectMap["id"] = agspp.ID
5700	}
5701	return json.Marshal(objectMap)
5702}
5703
5704// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
5705func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
5706	var m map[string]*json.RawMessage
5707	err := json.Unmarshal(body, &m)
5708	if err != nil {
5709		return err
5710	}
5711	for k, v := range m {
5712		switch k {
5713		case "name":
5714			if v != nil {
5715				var name string
5716				err = json.Unmarshal(*v, &name)
5717				if err != nil {
5718					return err
5719				}
5720				agspp.Name = &name
5721			}
5722		case "properties":
5723			if v != nil {
5724				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
5725				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
5726				if err != nil {
5727					return err
5728				}
5729				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
5730			}
5731		case "id":
5732			if v != nil {
5733				var ID string
5734				err = json.Unmarshal(*v, &ID)
5735				if err != nil {
5736					return err
5737				}
5738				agspp.ID = &ID
5739			}
5740		}
5741	}
5742
5743	return nil
5744}
5745
5746// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
5747// ApplicationGatewaySslPredefinedPolicy.
5748type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
5749	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
5750	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
5751	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
5752	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
5753}
5754
5755// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
5756// long-running operation.
5757type ApplicationGatewaysStartFuture struct {
5758	azure.Future
5759}
5760
5761// Result returns the result of the asynchronous operation.
5762// If the operation has not completed it will return an error.
5763func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
5764	var done bool
5765	done, err = future.DoneWithContext(context.Background(), client)
5766	if err != nil {
5767		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
5768		return
5769	}
5770	if !done {
5771		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
5772		return
5773	}
5774	ar.Response = future.Response()
5775	return
5776}
5777
5778// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
5779// operation.
5780type ApplicationGatewaysStopFuture struct {
5781	azure.Future
5782}
5783
5784// Result returns the result of the asynchronous operation.
5785// If the operation has not completed it will return an error.
5786func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
5787	var done bool
5788	done, err = future.DoneWithContext(context.Background(), client)
5789	if err != nil {
5790		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
5791		return
5792	}
5793	if !done {
5794		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
5795		return
5796	}
5797	ar.Response = future.Response()
5798	return
5799}
5800
5801// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
5802type ApplicationGatewayTrustedRootCertificate struct {
5803	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
5804	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
5805	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
5806	Name *string `json:"name,omitempty"`
5807	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5808	Etag *string `json:"etag,omitempty"`
5809	// Type - READ-ONLY; Type of the resource.
5810	Type *string `json:"type,omitempty"`
5811	// ID - Resource ID.
5812	ID *string `json:"id,omitempty"`
5813}
5814
5815// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
5816func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
5817	objectMap := make(map[string]interface{})
5818	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
5819		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
5820	}
5821	if agtrc.Name != nil {
5822		objectMap["name"] = agtrc.Name
5823	}
5824	if agtrc.ID != nil {
5825		objectMap["id"] = agtrc.ID
5826	}
5827	return json.Marshal(objectMap)
5828}
5829
5830// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
5831func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
5832	var m map[string]*json.RawMessage
5833	err := json.Unmarshal(body, &m)
5834	if err != nil {
5835		return err
5836	}
5837	for k, v := range m {
5838		switch k {
5839		case "properties":
5840			if v != nil {
5841				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
5842				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
5843				if err != nil {
5844					return err
5845				}
5846				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
5847			}
5848		case "name":
5849			if v != nil {
5850				var name string
5851				err = json.Unmarshal(*v, &name)
5852				if err != nil {
5853					return err
5854				}
5855				agtrc.Name = &name
5856			}
5857		case "etag":
5858			if v != nil {
5859				var etag string
5860				err = json.Unmarshal(*v, &etag)
5861				if err != nil {
5862					return err
5863				}
5864				agtrc.Etag = &etag
5865			}
5866		case "type":
5867			if v != nil {
5868				var typeVar string
5869				err = json.Unmarshal(*v, &typeVar)
5870				if err != nil {
5871					return err
5872				}
5873				agtrc.Type = &typeVar
5874			}
5875		case "id":
5876			if v != nil {
5877				var ID string
5878				err = json.Unmarshal(*v, &ID)
5879				if err != nil {
5880					return err
5881				}
5882				agtrc.ID = &ID
5883			}
5884		}
5885	}
5886
5887	return nil
5888}
5889
5890// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
5891// application gateway.
5892type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
5893	// Data - Certificate public data.
5894	Data *string `json:"data,omitempty"`
5895	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
5896	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
5897	// ProvisioningState - READ-ONLY; The provisioning state of the trusted root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5898	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5899}
5900
5901// ApplicationGatewayURLConfiguration url configuration of the Actions set in Application Gateway.
5902type ApplicationGatewayURLConfiguration struct {
5903	// ModifiedPath - Url path which user has provided for url rewrite. Null means no path will be updated. Default value is null.
5904	ModifiedPath *string `json:"modifiedPath,omitempty"`
5905	// ModifiedQueryString - Query string which user has provided for url rewrite. Null means no query string will be updated. Default value is null.
5906	ModifiedQueryString *string `json:"modifiedQueryString,omitempty"`
5907	// Reroute - If set as true, it will re-evaluate the url path map provided in path based request routing rules using modified path. Default value is false.
5908	Reroute *bool `json:"reroute,omitempty"`
5909}
5910
5911// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
5912// PathBasedRouting.
5913type ApplicationGatewayURLPathMap struct {
5914	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
5915	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
5916	// Name - Name of the URL path map that is unique within an Application Gateway.
5917	Name *string `json:"name,omitempty"`
5918	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5919	Etag *string `json:"etag,omitempty"`
5920	// Type - READ-ONLY; Type of the resource.
5921	Type *string `json:"type,omitempty"`
5922	// ID - Resource ID.
5923	ID *string `json:"id,omitempty"`
5924}
5925
5926// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
5927func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
5928	objectMap := make(map[string]interface{})
5929	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
5930		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
5931	}
5932	if agupm.Name != nil {
5933		objectMap["name"] = agupm.Name
5934	}
5935	if agupm.ID != nil {
5936		objectMap["id"] = agupm.ID
5937	}
5938	return json.Marshal(objectMap)
5939}
5940
5941// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
5942func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
5943	var m map[string]*json.RawMessage
5944	err := json.Unmarshal(body, &m)
5945	if err != nil {
5946		return err
5947	}
5948	for k, v := range m {
5949		switch k {
5950		case "properties":
5951			if v != nil {
5952				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
5953				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
5954				if err != nil {
5955					return err
5956				}
5957				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
5958			}
5959		case "name":
5960			if v != nil {
5961				var name string
5962				err = json.Unmarshal(*v, &name)
5963				if err != nil {
5964					return err
5965				}
5966				agupm.Name = &name
5967			}
5968		case "etag":
5969			if v != nil {
5970				var etag string
5971				err = json.Unmarshal(*v, &etag)
5972				if err != nil {
5973					return err
5974				}
5975				agupm.Etag = &etag
5976			}
5977		case "type":
5978			if v != nil {
5979				var typeVar string
5980				err = json.Unmarshal(*v, &typeVar)
5981				if err != nil {
5982					return err
5983				}
5984				agupm.Type = &typeVar
5985			}
5986		case "id":
5987			if v != nil {
5988				var ID string
5989				err = json.Unmarshal(*v, &ID)
5990				if err != nil {
5991					return err
5992				}
5993				agupm.ID = &ID
5994			}
5995		}
5996	}
5997
5998	return nil
5999}
6000
6001// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
6002type ApplicationGatewayURLPathMapPropertiesFormat struct {
6003	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
6004	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
6005	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
6006	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
6007	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
6008	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
6009	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
6010	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
6011	// PathRules - Path rule of URL path map resource.
6012	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
6013	// ProvisioningState - READ-ONLY; The provisioning state of the URL path map resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6014	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6015}
6016
6017// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
6018// configuration.
6019type ApplicationGatewayWebApplicationFirewallConfiguration struct {
6020	// Enabled - Whether the web application firewall is enabled or not.
6021	Enabled *bool `json:"enabled,omitempty"`
6022	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
6023	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
6024	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
6025	RuleSetType *string `json:"ruleSetType,omitempty"`
6026	// RuleSetVersion - The version of the rule set type.
6027	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
6028	// DisabledRuleGroups - The disabled rule groups.
6029	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
6030	// RequestBodyCheck - Whether allow WAF to check request Body.
6031	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
6032	// MaxRequestBodySize - Maximum request body size for WAF.
6033	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
6034	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
6035	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
6036	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
6037	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
6038	// Exclusions - The exclusion list.
6039	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
6040}
6041
6042// ApplicationRule rule of type application.
6043type ApplicationRule struct {
6044	// SourceAddresses - List of source IP addresses for this rule.
6045	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6046	// DestinationAddresses - List of destination IP addresses or Service Tags.
6047	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6048	// Protocols - Array of Application Protocols.
6049	Protocols *[]FirewallPolicyRuleApplicationProtocol `json:"protocols,omitempty"`
6050	// TargetUrls - List of Urls for this rule condition.
6051	TargetUrls *[]string `json:"targetUrls,omitempty"`
6052	// TargetFqdns - List of FQDNs for this rule.
6053	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
6054	// FqdnTags - List of FQDN Tags for this rule.
6055	FqdnTags *[]string `json:"fqdnTags,omitempty"`
6056	// SourceIPGroups - List of source IpGroups for this rule.
6057	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
6058	// TerminateTLS - Terminate TLS connections for this rule.
6059	TerminateTLS *bool `json:"terminateTLS,omitempty"`
6060	// Name - Name of the rule.
6061	Name *string `json:"name,omitempty"`
6062	// Description - Description of the rule.
6063	Description *string `json:"description,omitempty"`
6064	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeApplicationRule', 'RuleTypeNatRule', 'RuleTypeNetworkRule'
6065	RuleType RuleType `json:"ruleType,omitempty"`
6066}
6067
6068// MarshalJSON is the custom marshaler for ApplicationRule.
6069func (ar ApplicationRule) MarshalJSON() ([]byte, error) {
6070	ar.RuleType = RuleTypeApplicationRule
6071	objectMap := make(map[string]interface{})
6072	if ar.SourceAddresses != nil {
6073		objectMap["sourceAddresses"] = ar.SourceAddresses
6074	}
6075	if ar.DestinationAddresses != nil {
6076		objectMap["destinationAddresses"] = ar.DestinationAddresses
6077	}
6078	if ar.Protocols != nil {
6079		objectMap["protocols"] = ar.Protocols
6080	}
6081	if ar.TargetUrls != nil {
6082		objectMap["targetUrls"] = ar.TargetUrls
6083	}
6084	if ar.TargetFqdns != nil {
6085		objectMap["targetFqdns"] = ar.TargetFqdns
6086	}
6087	if ar.FqdnTags != nil {
6088		objectMap["fqdnTags"] = ar.FqdnTags
6089	}
6090	if ar.SourceIPGroups != nil {
6091		objectMap["sourceIpGroups"] = ar.SourceIPGroups
6092	}
6093	if ar.TerminateTLS != nil {
6094		objectMap["terminateTLS"] = ar.TerminateTLS
6095	}
6096	if ar.Name != nil {
6097		objectMap["name"] = ar.Name
6098	}
6099	if ar.Description != nil {
6100		objectMap["description"] = ar.Description
6101	}
6102	if ar.RuleType != "" {
6103		objectMap["ruleType"] = ar.RuleType
6104	}
6105	return json.Marshal(objectMap)
6106}
6107
6108// AsApplicationRule is the BasicFirewallPolicyRule implementation for ApplicationRule.
6109func (ar ApplicationRule) AsApplicationRule() (*ApplicationRule, bool) {
6110	return &ar, true
6111}
6112
6113// AsNatRule is the BasicFirewallPolicyRule implementation for ApplicationRule.
6114func (ar ApplicationRule) AsNatRule() (*NatRule, bool) {
6115	return nil, false
6116}
6117
6118// AsRule is the BasicFirewallPolicyRule implementation for ApplicationRule.
6119func (ar ApplicationRule) AsRule() (*Rule, bool) {
6120	return nil, false
6121}
6122
6123// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for ApplicationRule.
6124func (ar ApplicationRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
6125	return nil, false
6126}
6127
6128// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for ApplicationRule.
6129func (ar ApplicationRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
6130	return &ar, true
6131}
6132
6133// ApplicationSecurityGroup an application security group in a resource group.
6134type ApplicationSecurityGroup struct {
6135	autorest.Response `json:"-"`
6136	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
6137	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
6138	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6139	Etag *string `json:"etag,omitempty"`
6140	// ID - Resource ID.
6141	ID *string `json:"id,omitempty"`
6142	// Name - READ-ONLY; Resource name.
6143	Name *string `json:"name,omitempty"`
6144	// Type - READ-ONLY; Resource type.
6145	Type *string `json:"type,omitempty"`
6146	// Location - Resource location.
6147	Location *string `json:"location,omitempty"`
6148	// Tags - Resource tags.
6149	Tags map[string]*string `json:"tags"`
6150}
6151
6152// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
6153func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
6154	objectMap := make(map[string]interface{})
6155	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
6156		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
6157	}
6158	if asg.ID != nil {
6159		objectMap["id"] = asg.ID
6160	}
6161	if asg.Location != nil {
6162		objectMap["location"] = asg.Location
6163	}
6164	if asg.Tags != nil {
6165		objectMap["tags"] = asg.Tags
6166	}
6167	return json.Marshal(objectMap)
6168}
6169
6170// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
6171func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
6172	var m map[string]*json.RawMessage
6173	err := json.Unmarshal(body, &m)
6174	if err != nil {
6175		return err
6176	}
6177	for k, v := range m {
6178		switch k {
6179		case "properties":
6180			if v != nil {
6181				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
6182				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
6183				if err != nil {
6184					return err
6185				}
6186				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
6187			}
6188		case "etag":
6189			if v != nil {
6190				var etag string
6191				err = json.Unmarshal(*v, &etag)
6192				if err != nil {
6193					return err
6194				}
6195				asg.Etag = &etag
6196			}
6197		case "id":
6198			if v != nil {
6199				var ID string
6200				err = json.Unmarshal(*v, &ID)
6201				if err != nil {
6202					return err
6203				}
6204				asg.ID = &ID
6205			}
6206		case "name":
6207			if v != nil {
6208				var name string
6209				err = json.Unmarshal(*v, &name)
6210				if err != nil {
6211					return err
6212				}
6213				asg.Name = &name
6214			}
6215		case "type":
6216			if v != nil {
6217				var typeVar string
6218				err = json.Unmarshal(*v, &typeVar)
6219				if err != nil {
6220					return err
6221				}
6222				asg.Type = &typeVar
6223			}
6224		case "location":
6225			if v != nil {
6226				var location string
6227				err = json.Unmarshal(*v, &location)
6228				if err != nil {
6229					return err
6230				}
6231				asg.Location = &location
6232			}
6233		case "tags":
6234			if v != nil {
6235				var tags map[string]*string
6236				err = json.Unmarshal(*v, &tags)
6237				if err != nil {
6238					return err
6239				}
6240				asg.Tags = tags
6241			}
6242		}
6243	}
6244
6245	return nil
6246}
6247
6248// ApplicationSecurityGroupListResult a list of application security groups.
6249type ApplicationSecurityGroupListResult struct {
6250	autorest.Response `json:"-"`
6251	// Value - A list of application security groups.
6252	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
6253	// NextLink - READ-ONLY; The URL to get the next set of results.
6254	NextLink *string `json:"nextLink,omitempty"`
6255}
6256
6257// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
6258// ApplicationSecurityGroup values.
6259type ApplicationSecurityGroupListResultIterator struct {
6260	i    int
6261	page ApplicationSecurityGroupListResultPage
6262}
6263
6264// NextWithContext advances to the next value.  If there was an error making
6265// the request the iterator does not advance and the error is returned.
6266func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
6267	if tracing.IsEnabled() {
6268		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
6269		defer func() {
6270			sc := -1
6271			if iter.Response().Response.Response != nil {
6272				sc = iter.Response().Response.Response.StatusCode
6273			}
6274			tracing.EndSpan(ctx, sc, err)
6275		}()
6276	}
6277	iter.i++
6278	if iter.i < len(iter.page.Values()) {
6279		return nil
6280	}
6281	err = iter.page.NextWithContext(ctx)
6282	if err != nil {
6283		iter.i--
6284		return err
6285	}
6286	iter.i = 0
6287	return nil
6288}
6289
6290// Next advances to the next value.  If there was an error making
6291// the request the iterator does not advance and the error is returned.
6292// Deprecated: Use NextWithContext() instead.
6293func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
6294	return iter.NextWithContext(context.Background())
6295}
6296
6297// NotDone returns true if the enumeration should be started or is not yet complete.
6298func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
6299	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6300}
6301
6302// Response returns the raw server response from the last page request.
6303func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
6304	return iter.page.Response()
6305}
6306
6307// Value returns the current value or a zero-initialized value if the
6308// iterator has advanced beyond the end of the collection.
6309func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
6310	if !iter.page.NotDone() {
6311		return ApplicationSecurityGroup{}
6312	}
6313	return iter.page.Values()[iter.i]
6314}
6315
6316// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
6317func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
6318	return ApplicationSecurityGroupListResultIterator{page: page}
6319}
6320
6321// IsEmpty returns true if the ListResult contains no values.
6322func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
6323	return asglr.Value == nil || len(*asglr.Value) == 0
6324}
6325
6326// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
6327// It returns nil if no more results exist.
6328func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
6329	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
6330		return nil, nil
6331	}
6332	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6333		autorest.AsJSON(),
6334		autorest.AsGet(),
6335		autorest.WithBaseURL(to.String(asglr.NextLink)))
6336}
6337
6338// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
6339type ApplicationSecurityGroupListResultPage struct {
6340	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
6341	asglr ApplicationSecurityGroupListResult
6342}
6343
6344// NextWithContext advances to the next page of values.  If there was an error making
6345// the request the page does not advance and the error is returned.
6346func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
6347	if tracing.IsEnabled() {
6348		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
6349		defer func() {
6350			sc := -1
6351			if page.Response().Response.Response != nil {
6352				sc = page.Response().Response.Response.StatusCode
6353			}
6354			tracing.EndSpan(ctx, sc, err)
6355		}()
6356	}
6357	next, err := page.fn(ctx, page.asglr)
6358	if err != nil {
6359		return err
6360	}
6361	page.asglr = next
6362	return nil
6363}
6364
6365// Next advances to the next page of values.  If there was an error making
6366// the request the page does not advance and the error is returned.
6367// Deprecated: Use NextWithContext() instead.
6368func (page *ApplicationSecurityGroupListResultPage) Next() error {
6369	return page.NextWithContext(context.Background())
6370}
6371
6372// NotDone returns true if the page enumeration should be started or is not yet complete.
6373func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
6374	return !page.asglr.IsEmpty()
6375}
6376
6377// Response returns the raw server response from the last page request.
6378func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
6379	return page.asglr
6380}
6381
6382// Values returns the slice of values for the current page or nil if there are no values.
6383func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
6384	if page.asglr.IsEmpty() {
6385		return nil
6386	}
6387	return *page.asglr.Value
6388}
6389
6390// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
6391func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
6392	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
6393}
6394
6395// ApplicationSecurityGroupPropertiesFormat application security group properties.
6396type ApplicationSecurityGroupPropertiesFormat struct {
6397	// ResourceGUID - READ-ONLY; The resource GUID property of the application security group resource. It uniquely identifies a resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
6398	ResourceGUID *string `json:"resourceGuid,omitempty"`
6399	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6400	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6401}
6402
6403// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
6404// of a long-running operation.
6405type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
6406	azure.Future
6407}
6408
6409// Result returns the result of the asynchronous operation.
6410// If the operation has not completed it will return an error.
6411func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
6412	var done bool
6413	done, err = future.DoneWithContext(context.Background(), client)
6414	if err != nil {
6415		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6416		return
6417	}
6418	if !done {
6419		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
6420		return
6421	}
6422	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6423	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
6424		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
6425		if err != nil {
6426			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
6427		}
6428	}
6429	return
6430}
6431
6432// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
6433// long-running operation.
6434type ApplicationSecurityGroupsDeleteFuture struct {
6435	azure.Future
6436}
6437
6438// Result returns the result of the asynchronous operation.
6439// If the operation has not completed it will return an error.
6440func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
6441	var done bool
6442	done, err = future.DoneWithContext(context.Background(), client)
6443	if err != nil {
6444		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
6445		return
6446	}
6447	if !done {
6448		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
6449		return
6450	}
6451	ar.Response = future.Response()
6452	return
6453}
6454
6455// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
6456// that belongs to an ExpressRouteCircuit.
6457type AuthorizationListResult struct {
6458	autorest.Response `json:"-"`
6459	// Value - The authorizations in an ExpressRoute Circuit.
6460	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
6461	// NextLink - The URL to get the next set of results.
6462	NextLink *string `json:"nextLink,omitempty"`
6463}
6464
6465// AuthorizationListResultIterator provides access to a complete listing of
6466// ExpressRouteCircuitAuthorization values.
6467type AuthorizationListResultIterator struct {
6468	i    int
6469	page AuthorizationListResultPage
6470}
6471
6472// NextWithContext advances to the next value.  If there was an error making
6473// the request the iterator does not advance and the error is returned.
6474func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
6475	if tracing.IsEnabled() {
6476		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
6477		defer func() {
6478			sc := -1
6479			if iter.Response().Response.Response != nil {
6480				sc = iter.Response().Response.Response.StatusCode
6481			}
6482			tracing.EndSpan(ctx, sc, err)
6483		}()
6484	}
6485	iter.i++
6486	if iter.i < len(iter.page.Values()) {
6487		return nil
6488	}
6489	err = iter.page.NextWithContext(ctx)
6490	if err != nil {
6491		iter.i--
6492		return err
6493	}
6494	iter.i = 0
6495	return nil
6496}
6497
6498// Next advances to the next value.  If there was an error making
6499// the request the iterator does not advance and the error is returned.
6500// Deprecated: Use NextWithContext() instead.
6501func (iter *AuthorizationListResultIterator) Next() error {
6502	return iter.NextWithContext(context.Background())
6503}
6504
6505// NotDone returns true if the enumeration should be started or is not yet complete.
6506func (iter AuthorizationListResultIterator) NotDone() bool {
6507	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6508}
6509
6510// Response returns the raw server response from the last page request.
6511func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
6512	return iter.page.Response()
6513}
6514
6515// Value returns the current value or a zero-initialized value if the
6516// iterator has advanced beyond the end of the collection.
6517func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
6518	if !iter.page.NotDone() {
6519		return ExpressRouteCircuitAuthorization{}
6520	}
6521	return iter.page.Values()[iter.i]
6522}
6523
6524// Creates a new instance of the AuthorizationListResultIterator type.
6525func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
6526	return AuthorizationListResultIterator{page: page}
6527}
6528
6529// IsEmpty returns true if the ListResult contains no values.
6530func (alr AuthorizationListResult) IsEmpty() bool {
6531	return alr.Value == nil || len(*alr.Value) == 0
6532}
6533
6534// authorizationListResultPreparer prepares a request to retrieve the next set of results.
6535// It returns nil if no more results exist.
6536func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
6537	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
6538		return nil, nil
6539	}
6540	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6541		autorest.AsJSON(),
6542		autorest.AsGet(),
6543		autorest.WithBaseURL(to.String(alr.NextLink)))
6544}
6545
6546// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
6547type AuthorizationListResultPage struct {
6548	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
6549	alr AuthorizationListResult
6550}
6551
6552// NextWithContext advances to the next page of values.  If there was an error making
6553// the request the page does not advance and the error is returned.
6554func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
6555	if tracing.IsEnabled() {
6556		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
6557		defer func() {
6558			sc := -1
6559			if page.Response().Response.Response != nil {
6560				sc = page.Response().Response.Response.StatusCode
6561			}
6562			tracing.EndSpan(ctx, sc, err)
6563		}()
6564	}
6565	next, err := page.fn(ctx, page.alr)
6566	if err != nil {
6567		return err
6568	}
6569	page.alr = next
6570	return nil
6571}
6572
6573// Next advances to the next page of values.  If there was an error making
6574// the request the page does not advance and the error is returned.
6575// Deprecated: Use NextWithContext() instead.
6576func (page *AuthorizationListResultPage) Next() error {
6577	return page.NextWithContext(context.Background())
6578}
6579
6580// NotDone returns true if the page enumeration should be started or is not yet complete.
6581func (page AuthorizationListResultPage) NotDone() bool {
6582	return !page.alr.IsEmpty()
6583}
6584
6585// Response returns the raw server response from the last page request.
6586func (page AuthorizationListResultPage) Response() AuthorizationListResult {
6587	return page.alr
6588}
6589
6590// Values returns the slice of values for the current page or nil if there are no values.
6591func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
6592	if page.alr.IsEmpty() {
6593		return nil
6594	}
6595	return *page.alr.Value
6596}
6597
6598// Creates a new instance of the AuthorizationListResultPage type.
6599func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
6600	return AuthorizationListResultPage{fn: getNextPage}
6601}
6602
6603// AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
6604type AuthorizationPropertiesFormat struct {
6605	// AuthorizationKey - The authorization key.
6606	AuthorizationKey *string `json:"authorizationKey,omitempty"`
6607	// AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse'
6608	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
6609	// ProvisioningState - READ-ONLY; The provisioning state of the authorization resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6610	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6611}
6612
6613// AutoApprovedPrivateLinkService the information of an AutoApprovedPrivateLinkService.
6614type AutoApprovedPrivateLinkService struct {
6615	// PrivateLinkService - The id of the private link service resource.
6616	PrivateLinkService *string `json:"privateLinkService,omitempty"`
6617}
6618
6619// AutoApprovedPrivateLinkServicesResult an array of private link service id that can be linked to a
6620// private end point with auto approved.
6621type AutoApprovedPrivateLinkServicesResult struct {
6622	autorest.Response `json:"-"`
6623	// Value - An array of auto approved private link service.
6624	Value *[]AutoApprovedPrivateLinkService `json:"value,omitempty"`
6625	// NextLink - READ-ONLY; The URL to get the next set of results.
6626	NextLink *string `json:"nextLink,omitempty"`
6627}
6628
6629// AutoApprovedPrivateLinkServicesResultIterator provides access to a complete listing of
6630// AutoApprovedPrivateLinkService values.
6631type AutoApprovedPrivateLinkServicesResultIterator struct {
6632	i    int
6633	page AutoApprovedPrivateLinkServicesResultPage
6634}
6635
6636// NextWithContext advances to the next value.  If there was an error making
6637// the request the iterator does not advance and the error is returned.
6638func (iter *AutoApprovedPrivateLinkServicesResultIterator) NextWithContext(ctx context.Context) (err error) {
6639	if tracing.IsEnabled() {
6640		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultIterator.NextWithContext")
6641		defer func() {
6642			sc := -1
6643			if iter.Response().Response.Response != nil {
6644				sc = iter.Response().Response.Response.StatusCode
6645			}
6646			tracing.EndSpan(ctx, sc, err)
6647		}()
6648	}
6649	iter.i++
6650	if iter.i < len(iter.page.Values()) {
6651		return nil
6652	}
6653	err = iter.page.NextWithContext(ctx)
6654	if err != nil {
6655		iter.i--
6656		return err
6657	}
6658	iter.i = 0
6659	return nil
6660}
6661
6662// Next advances to the next value.  If there was an error making
6663// the request the iterator does not advance and the error is returned.
6664// Deprecated: Use NextWithContext() instead.
6665func (iter *AutoApprovedPrivateLinkServicesResultIterator) Next() error {
6666	return iter.NextWithContext(context.Background())
6667}
6668
6669// NotDone returns true if the enumeration should be started or is not yet complete.
6670func (iter AutoApprovedPrivateLinkServicesResultIterator) NotDone() bool {
6671	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6672}
6673
6674// Response returns the raw server response from the last page request.
6675func (iter AutoApprovedPrivateLinkServicesResultIterator) Response() AutoApprovedPrivateLinkServicesResult {
6676	return iter.page.Response()
6677}
6678
6679// Value returns the current value or a zero-initialized value if the
6680// iterator has advanced beyond the end of the collection.
6681func (iter AutoApprovedPrivateLinkServicesResultIterator) Value() AutoApprovedPrivateLinkService {
6682	if !iter.page.NotDone() {
6683		return AutoApprovedPrivateLinkService{}
6684	}
6685	return iter.page.Values()[iter.i]
6686}
6687
6688// Creates a new instance of the AutoApprovedPrivateLinkServicesResultIterator type.
6689func NewAutoApprovedPrivateLinkServicesResultIterator(page AutoApprovedPrivateLinkServicesResultPage) AutoApprovedPrivateLinkServicesResultIterator {
6690	return AutoApprovedPrivateLinkServicesResultIterator{page: page}
6691}
6692
6693// IsEmpty returns true if the ListResult contains no values.
6694func (aaplsr AutoApprovedPrivateLinkServicesResult) IsEmpty() bool {
6695	return aaplsr.Value == nil || len(*aaplsr.Value) == 0
6696}
6697
6698// autoApprovedPrivateLinkServicesResultPreparer prepares a request to retrieve the next set of results.
6699// It returns nil if no more results exist.
6700func (aaplsr AutoApprovedPrivateLinkServicesResult) autoApprovedPrivateLinkServicesResultPreparer(ctx context.Context) (*http.Request, error) {
6701	if aaplsr.NextLink == nil || len(to.String(aaplsr.NextLink)) < 1 {
6702		return nil, nil
6703	}
6704	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6705		autorest.AsJSON(),
6706		autorest.AsGet(),
6707		autorest.WithBaseURL(to.String(aaplsr.NextLink)))
6708}
6709
6710// AutoApprovedPrivateLinkServicesResultPage contains a page of AutoApprovedPrivateLinkService values.
6711type AutoApprovedPrivateLinkServicesResultPage struct {
6712	fn     func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)
6713	aaplsr AutoApprovedPrivateLinkServicesResult
6714}
6715
6716// NextWithContext advances to the next page of values.  If there was an error making
6717// the request the page does not advance and the error is returned.
6718func (page *AutoApprovedPrivateLinkServicesResultPage) NextWithContext(ctx context.Context) (err error) {
6719	if tracing.IsEnabled() {
6720		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultPage.NextWithContext")
6721		defer func() {
6722			sc := -1
6723			if page.Response().Response.Response != nil {
6724				sc = page.Response().Response.Response.StatusCode
6725			}
6726			tracing.EndSpan(ctx, sc, err)
6727		}()
6728	}
6729	next, err := page.fn(ctx, page.aaplsr)
6730	if err != nil {
6731		return err
6732	}
6733	page.aaplsr = next
6734	return nil
6735}
6736
6737// Next advances to the next page of values.  If there was an error making
6738// the request the page does not advance and the error is returned.
6739// Deprecated: Use NextWithContext() instead.
6740func (page *AutoApprovedPrivateLinkServicesResultPage) Next() error {
6741	return page.NextWithContext(context.Background())
6742}
6743
6744// NotDone returns true if the page enumeration should be started or is not yet complete.
6745func (page AutoApprovedPrivateLinkServicesResultPage) NotDone() bool {
6746	return !page.aaplsr.IsEmpty()
6747}
6748
6749// Response returns the raw server response from the last page request.
6750func (page AutoApprovedPrivateLinkServicesResultPage) Response() AutoApprovedPrivateLinkServicesResult {
6751	return page.aaplsr
6752}
6753
6754// Values returns the slice of values for the current page or nil if there are no values.
6755func (page AutoApprovedPrivateLinkServicesResultPage) Values() []AutoApprovedPrivateLinkService {
6756	if page.aaplsr.IsEmpty() {
6757		return nil
6758	}
6759	return *page.aaplsr.Value
6760}
6761
6762// Creates a new instance of the AutoApprovedPrivateLinkServicesResultPage type.
6763func NewAutoApprovedPrivateLinkServicesResultPage(getNextPage func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)) AutoApprovedPrivateLinkServicesResultPage {
6764	return AutoApprovedPrivateLinkServicesResultPage{fn: getNextPage}
6765}
6766
6767// Availability availability of the metric.
6768type Availability struct {
6769	// TimeGrain - The time grain of the availability.
6770	TimeGrain *string `json:"timeGrain,omitempty"`
6771	// Retention - The retention of the availability.
6772	Retention *string `json:"retention,omitempty"`
6773	// BlobDuration - Duration of the availability blob.
6774	BlobDuration *string `json:"blobDuration,omitempty"`
6775}
6776
6777// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
6778// subnet.
6779type AvailableDelegation struct {
6780	// Name - The name of the AvailableDelegation resource.
6781	Name *string `json:"name,omitempty"`
6782	// ID - A unique identifier of the AvailableDelegation resource.
6783	ID *string `json:"id,omitempty"`
6784	// Type - Resource type.
6785	Type *string `json:"type,omitempty"`
6786	// ServiceName - The name of the service and resource.
6787	ServiceName *string `json:"serviceName,omitempty"`
6788	// Actions - The actions permitted to the service upon delegation.
6789	Actions *[]string `json:"actions,omitempty"`
6790}
6791
6792// AvailableDelegationsResult an array of available delegations.
6793type AvailableDelegationsResult struct {
6794	autorest.Response `json:"-"`
6795	// Value - An array of available delegations.
6796	Value *[]AvailableDelegation `json:"value,omitempty"`
6797	// NextLink - READ-ONLY; The URL to get the next set of results.
6798	NextLink *string `json:"nextLink,omitempty"`
6799}
6800
6801// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
6802type AvailableDelegationsResultIterator struct {
6803	i    int
6804	page AvailableDelegationsResultPage
6805}
6806
6807// NextWithContext advances to the next value.  If there was an error making
6808// the request the iterator does not advance and the error is returned.
6809func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
6810	if tracing.IsEnabled() {
6811		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
6812		defer func() {
6813			sc := -1
6814			if iter.Response().Response.Response != nil {
6815				sc = iter.Response().Response.Response.StatusCode
6816			}
6817			tracing.EndSpan(ctx, sc, err)
6818		}()
6819	}
6820	iter.i++
6821	if iter.i < len(iter.page.Values()) {
6822		return nil
6823	}
6824	err = iter.page.NextWithContext(ctx)
6825	if err != nil {
6826		iter.i--
6827		return err
6828	}
6829	iter.i = 0
6830	return nil
6831}
6832
6833// Next advances to the next value.  If there was an error making
6834// the request the iterator does not advance and the error is returned.
6835// Deprecated: Use NextWithContext() instead.
6836func (iter *AvailableDelegationsResultIterator) Next() error {
6837	return iter.NextWithContext(context.Background())
6838}
6839
6840// NotDone returns true if the enumeration should be started or is not yet complete.
6841func (iter AvailableDelegationsResultIterator) NotDone() bool {
6842	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6843}
6844
6845// Response returns the raw server response from the last page request.
6846func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
6847	return iter.page.Response()
6848}
6849
6850// Value returns the current value or a zero-initialized value if the
6851// iterator has advanced beyond the end of the collection.
6852func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
6853	if !iter.page.NotDone() {
6854		return AvailableDelegation{}
6855	}
6856	return iter.page.Values()[iter.i]
6857}
6858
6859// Creates a new instance of the AvailableDelegationsResultIterator type.
6860func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
6861	return AvailableDelegationsResultIterator{page: page}
6862}
6863
6864// IsEmpty returns true if the ListResult contains no values.
6865func (adr AvailableDelegationsResult) IsEmpty() bool {
6866	return adr.Value == nil || len(*adr.Value) == 0
6867}
6868
6869// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
6870// It returns nil if no more results exist.
6871func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
6872	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
6873		return nil, nil
6874	}
6875	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6876		autorest.AsJSON(),
6877		autorest.AsGet(),
6878		autorest.WithBaseURL(to.String(adr.NextLink)))
6879}
6880
6881// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
6882type AvailableDelegationsResultPage struct {
6883	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
6884	adr AvailableDelegationsResult
6885}
6886
6887// NextWithContext advances to the next page of values.  If there was an error making
6888// the request the page does not advance and the error is returned.
6889func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
6890	if tracing.IsEnabled() {
6891		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
6892		defer func() {
6893			sc := -1
6894			if page.Response().Response.Response != nil {
6895				sc = page.Response().Response.Response.StatusCode
6896			}
6897			tracing.EndSpan(ctx, sc, err)
6898		}()
6899	}
6900	next, err := page.fn(ctx, page.adr)
6901	if err != nil {
6902		return err
6903	}
6904	page.adr = next
6905	return nil
6906}
6907
6908// Next advances to the next page of values.  If there was an error making
6909// the request the page does not advance and the error is returned.
6910// Deprecated: Use NextWithContext() instead.
6911func (page *AvailableDelegationsResultPage) Next() error {
6912	return page.NextWithContext(context.Background())
6913}
6914
6915// NotDone returns true if the page enumeration should be started or is not yet complete.
6916func (page AvailableDelegationsResultPage) NotDone() bool {
6917	return !page.adr.IsEmpty()
6918}
6919
6920// Response returns the raw server response from the last page request.
6921func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
6922	return page.adr
6923}
6924
6925// Values returns the slice of values for the current page or nil if there are no values.
6926func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
6927	if page.adr.IsEmpty() {
6928		return nil
6929	}
6930	return *page.adr.Value
6931}
6932
6933// Creates a new instance of the AvailableDelegationsResultPage type.
6934func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
6935	return AvailableDelegationsResultPage{fn: getNextPage}
6936}
6937
6938// AvailablePrivateEndpointType the information of an AvailablePrivateEndpointType.
6939type AvailablePrivateEndpointType struct {
6940	// Name - The name of the service and resource.
6941	Name *string `json:"name,omitempty"`
6942	// ID - A unique identifier of the AvailablePrivateEndpoint Type resource.
6943	ID *string `json:"id,omitempty"`
6944	// Type - Resource type.
6945	Type *string `json:"type,omitempty"`
6946	// ResourceName - The name of the service and resource.
6947	ResourceName *string `json:"resourceName,omitempty"`
6948}
6949
6950// AvailablePrivateEndpointTypesResult an array of available PrivateEndpoint types.
6951type AvailablePrivateEndpointTypesResult struct {
6952	autorest.Response `json:"-"`
6953	// Value - An array of available privateEndpoint type.
6954	Value *[]AvailablePrivateEndpointType `json:"value,omitempty"`
6955	// NextLink - READ-ONLY; The URL to get the next set of results.
6956	NextLink *string `json:"nextLink,omitempty"`
6957}
6958
6959// AvailablePrivateEndpointTypesResultIterator provides access to a complete listing of
6960// AvailablePrivateEndpointType values.
6961type AvailablePrivateEndpointTypesResultIterator struct {
6962	i    int
6963	page AvailablePrivateEndpointTypesResultPage
6964}
6965
6966// NextWithContext advances to the next value.  If there was an error making
6967// the request the iterator does not advance and the error is returned.
6968func (iter *AvailablePrivateEndpointTypesResultIterator) NextWithContext(ctx context.Context) (err error) {
6969	if tracing.IsEnabled() {
6970		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultIterator.NextWithContext")
6971		defer func() {
6972			sc := -1
6973			if iter.Response().Response.Response != nil {
6974				sc = iter.Response().Response.Response.StatusCode
6975			}
6976			tracing.EndSpan(ctx, sc, err)
6977		}()
6978	}
6979	iter.i++
6980	if iter.i < len(iter.page.Values()) {
6981		return nil
6982	}
6983	err = iter.page.NextWithContext(ctx)
6984	if err != nil {
6985		iter.i--
6986		return err
6987	}
6988	iter.i = 0
6989	return nil
6990}
6991
6992// Next advances to the next value.  If there was an error making
6993// the request the iterator does not advance and the error is returned.
6994// Deprecated: Use NextWithContext() instead.
6995func (iter *AvailablePrivateEndpointTypesResultIterator) Next() error {
6996	return iter.NextWithContext(context.Background())
6997}
6998
6999// NotDone returns true if the enumeration should be started or is not yet complete.
7000func (iter AvailablePrivateEndpointTypesResultIterator) NotDone() bool {
7001	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7002}
7003
7004// Response returns the raw server response from the last page request.
7005func (iter AvailablePrivateEndpointTypesResultIterator) Response() AvailablePrivateEndpointTypesResult {
7006	return iter.page.Response()
7007}
7008
7009// Value returns the current value or a zero-initialized value if the
7010// iterator has advanced beyond the end of the collection.
7011func (iter AvailablePrivateEndpointTypesResultIterator) Value() AvailablePrivateEndpointType {
7012	if !iter.page.NotDone() {
7013		return AvailablePrivateEndpointType{}
7014	}
7015	return iter.page.Values()[iter.i]
7016}
7017
7018// Creates a new instance of the AvailablePrivateEndpointTypesResultIterator type.
7019func NewAvailablePrivateEndpointTypesResultIterator(page AvailablePrivateEndpointTypesResultPage) AvailablePrivateEndpointTypesResultIterator {
7020	return AvailablePrivateEndpointTypesResultIterator{page: page}
7021}
7022
7023// IsEmpty returns true if the ListResult contains no values.
7024func (apetr AvailablePrivateEndpointTypesResult) IsEmpty() bool {
7025	return apetr.Value == nil || len(*apetr.Value) == 0
7026}
7027
7028// availablePrivateEndpointTypesResultPreparer prepares a request to retrieve the next set of results.
7029// It returns nil if no more results exist.
7030func (apetr AvailablePrivateEndpointTypesResult) availablePrivateEndpointTypesResultPreparer(ctx context.Context) (*http.Request, error) {
7031	if apetr.NextLink == nil || len(to.String(apetr.NextLink)) < 1 {
7032		return nil, nil
7033	}
7034	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7035		autorest.AsJSON(),
7036		autorest.AsGet(),
7037		autorest.WithBaseURL(to.String(apetr.NextLink)))
7038}
7039
7040// AvailablePrivateEndpointTypesResultPage contains a page of AvailablePrivateEndpointType values.
7041type AvailablePrivateEndpointTypesResultPage struct {
7042	fn    func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)
7043	apetr AvailablePrivateEndpointTypesResult
7044}
7045
7046// NextWithContext advances to the next page of values.  If there was an error making
7047// the request the page does not advance and the error is returned.
7048func (page *AvailablePrivateEndpointTypesResultPage) NextWithContext(ctx context.Context) (err error) {
7049	if tracing.IsEnabled() {
7050		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultPage.NextWithContext")
7051		defer func() {
7052			sc := -1
7053			if page.Response().Response.Response != nil {
7054				sc = page.Response().Response.Response.StatusCode
7055			}
7056			tracing.EndSpan(ctx, sc, err)
7057		}()
7058	}
7059	next, err := page.fn(ctx, page.apetr)
7060	if err != nil {
7061		return err
7062	}
7063	page.apetr = next
7064	return nil
7065}
7066
7067// Next advances to the next page of values.  If there was an error making
7068// the request the page does not advance and the error is returned.
7069// Deprecated: Use NextWithContext() instead.
7070func (page *AvailablePrivateEndpointTypesResultPage) Next() error {
7071	return page.NextWithContext(context.Background())
7072}
7073
7074// NotDone returns true if the page enumeration should be started or is not yet complete.
7075func (page AvailablePrivateEndpointTypesResultPage) NotDone() bool {
7076	return !page.apetr.IsEmpty()
7077}
7078
7079// Response returns the raw server response from the last page request.
7080func (page AvailablePrivateEndpointTypesResultPage) Response() AvailablePrivateEndpointTypesResult {
7081	return page.apetr
7082}
7083
7084// Values returns the slice of values for the current page or nil if there are no values.
7085func (page AvailablePrivateEndpointTypesResultPage) Values() []AvailablePrivateEndpointType {
7086	if page.apetr.IsEmpty() {
7087		return nil
7088	}
7089	return *page.apetr.Value
7090}
7091
7092// Creates a new instance of the AvailablePrivateEndpointTypesResultPage type.
7093func NewAvailablePrivateEndpointTypesResultPage(getNextPage func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)) AvailablePrivateEndpointTypesResultPage {
7094	return AvailablePrivateEndpointTypesResultPage{fn: getNextPage}
7095}
7096
7097// AvailableProvidersList list of available countries with details.
7098type AvailableProvidersList struct {
7099	autorest.Response `json:"-"`
7100	// Countries - List of available countries.
7101	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
7102}
7103
7104// AvailableProvidersListCity city or town details.
7105type AvailableProvidersListCity struct {
7106	// CityName - The city or town name.
7107	CityName *string `json:"cityName,omitempty"`
7108	// Providers - A list of Internet service providers.
7109	Providers *[]string `json:"providers,omitempty"`
7110}
7111
7112// AvailableProvidersListCountry country details.
7113type AvailableProvidersListCountry struct {
7114	// CountryName - The country name.
7115	CountryName *string `json:"countryName,omitempty"`
7116	// Providers - A list of Internet service providers.
7117	Providers *[]string `json:"providers,omitempty"`
7118	// States - List of available states in the country.
7119	States *[]AvailableProvidersListState `json:"states,omitempty"`
7120}
7121
7122// AvailableProvidersListParameters constraints that determine the list of available Internet service
7123// providers.
7124type AvailableProvidersListParameters struct {
7125	// AzureLocations - A list of Azure regions.
7126	AzureLocations *[]string `json:"azureLocations,omitempty"`
7127	// Country - The country for available providers list.
7128	Country *string `json:"country,omitempty"`
7129	// State - The state for available providers list.
7130	State *string `json:"state,omitempty"`
7131	// City - The city or town for available providers list.
7132	City *string `json:"city,omitempty"`
7133}
7134
7135// AvailableProvidersListState state details.
7136type AvailableProvidersListState struct {
7137	// StateName - The state name.
7138	StateName *string `json:"stateName,omitempty"`
7139	// Providers - A list of Internet service providers.
7140	Providers *[]string `json:"providers,omitempty"`
7141	// Cities - List of available cities or towns in the state.
7142	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
7143}
7144
7145// AvailableServiceAlias the available service alias.
7146type AvailableServiceAlias struct {
7147	// Name - The name of the service alias.
7148	Name *string `json:"name,omitempty"`
7149	// ID - The ID of the service alias.
7150	ID *string `json:"id,omitempty"`
7151	// Type - The type of the resource.
7152	Type *string `json:"type,omitempty"`
7153	// ResourceName - The resource name of the service alias.
7154	ResourceName *string `json:"resourceName,omitempty"`
7155}
7156
7157// AvailableServiceAliasesResult an array of available service aliases.
7158type AvailableServiceAliasesResult struct {
7159	autorest.Response `json:"-"`
7160	// Value - An array of available service aliases.
7161	Value *[]AvailableServiceAlias `json:"value,omitempty"`
7162	// NextLink - READ-ONLY; The URL to get the next set of results.
7163	NextLink *string `json:"nextLink,omitempty"`
7164}
7165
7166// AvailableServiceAliasesResultIterator provides access to a complete listing of AvailableServiceAlias
7167// values.
7168type AvailableServiceAliasesResultIterator struct {
7169	i    int
7170	page AvailableServiceAliasesResultPage
7171}
7172
7173// NextWithContext advances to the next value.  If there was an error making
7174// the request the iterator does not advance and the error is returned.
7175func (iter *AvailableServiceAliasesResultIterator) NextWithContext(ctx context.Context) (err error) {
7176	if tracing.IsEnabled() {
7177		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultIterator.NextWithContext")
7178		defer func() {
7179			sc := -1
7180			if iter.Response().Response.Response != nil {
7181				sc = iter.Response().Response.Response.StatusCode
7182			}
7183			tracing.EndSpan(ctx, sc, err)
7184		}()
7185	}
7186	iter.i++
7187	if iter.i < len(iter.page.Values()) {
7188		return nil
7189	}
7190	err = iter.page.NextWithContext(ctx)
7191	if err != nil {
7192		iter.i--
7193		return err
7194	}
7195	iter.i = 0
7196	return nil
7197}
7198
7199// Next advances to the next value.  If there was an error making
7200// the request the iterator does not advance and the error is returned.
7201// Deprecated: Use NextWithContext() instead.
7202func (iter *AvailableServiceAliasesResultIterator) Next() error {
7203	return iter.NextWithContext(context.Background())
7204}
7205
7206// NotDone returns true if the enumeration should be started or is not yet complete.
7207func (iter AvailableServiceAliasesResultIterator) NotDone() bool {
7208	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7209}
7210
7211// Response returns the raw server response from the last page request.
7212func (iter AvailableServiceAliasesResultIterator) Response() AvailableServiceAliasesResult {
7213	return iter.page.Response()
7214}
7215
7216// Value returns the current value or a zero-initialized value if the
7217// iterator has advanced beyond the end of the collection.
7218func (iter AvailableServiceAliasesResultIterator) Value() AvailableServiceAlias {
7219	if !iter.page.NotDone() {
7220		return AvailableServiceAlias{}
7221	}
7222	return iter.page.Values()[iter.i]
7223}
7224
7225// Creates a new instance of the AvailableServiceAliasesResultIterator type.
7226func NewAvailableServiceAliasesResultIterator(page AvailableServiceAliasesResultPage) AvailableServiceAliasesResultIterator {
7227	return AvailableServiceAliasesResultIterator{page: page}
7228}
7229
7230// IsEmpty returns true if the ListResult contains no values.
7231func (asar AvailableServiceAliasesResult) IsEmpty() bool {
7232	return asar.Value == nil || len(*asar.Value) == 0
7233}
7234
7235// availableServiceAliasesResultPreparer prepares a request to retrieve the next set of results.
7236// It returns nil if no more results exist.
7237func (asar AvailableServiceAliasesResult) availableServiceAliasesResultPreparer(ctx context.Context) (*http.Request, error) {
7238	if asar.NextLink == nil || len(to.String(asar.NextLink)) < 1 {
7239		return nil, nil
7240	}
7241	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7242		autorest.AsJSON(),
7243		autorest.AsGet(),
7244		autorest.WithBaseURL(to.String(asar.NextLink)))
7245}
7246
7247// AvailableServiceAliasesResultPage contains a page of AvailableServiceAlias values.
7248type AvailableServiceAliasesResultPage struct {
7249	fn   func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)
7250	asar AvailableServiceAliasesResult
7251}
7252
7253// NextWithContext advances to the next page of values.  If there was an error making
7254// the request the page does not advance and the error is returned.
7255func (page *AvailableServiceAliasesResultPage) NextWithContext(ctx context.Context) (err error) {
7256	if tracing.IsEnabled() {
7257		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultPage.NextWithContext")
7258		defer func() {
7259			sc := -1
7260			if page.Response().Response.Response != nil {
7261				sc = page.Response().Response.Response.StatusCode
7262			}
7263			tracing.EndSpan(ctx, sc, err)
7264		}()
7265	}
7266	next, err := page.fn(ctx, page.asar)
7267	if err != nil {
7268		return err
7269	}
7270	page.asar = next
7271	return nil
7272}
7273
7274// Next advances to the next page of values.  If there was an error making
7275// the request the page does not advance and the error is returned.
7276// Deprecated: Use NextWithContext() instead.
7277func (page *AvailableServiceAliasesResultPage) Next() error {
7278	return page.NextWithContext(context.Background())
7279}
7280
7281// NotDone returns true if the page enumeration should be started or is not yet complete.
7282func (page AvailableServiceAliasesResultPage) NotDone() bool {
7283	return !page.asar.IsEmpty()
7284}
7285
7286// Response returns the raw server response from the last page request.
7287func (page AvailableServiceAliasesResultPage) Response() AvailableServiceAliasesResult {
7288	return page.asar
7289}
7290
7291// Values returns the slice of values for the current page or nil if there are no values.
7292func (page AvailableServiceAliasesResultPage) Values() []AvailableServiceAlias {
7293	if page.asar.IsEmpty() {
7294		return nil
7295	}
7296	return *page.asar.Value
7297}
7298
7299// Creates a new instance of the AvailableServiceAliasesResultPage type.
7300func NewAvailableServiceAliasesResultPage(getNextPage func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)) AvailableServiceAliasesResultPage {
7301	return AvailableServiceAliasesResultPage{fn: getNextPage}
7302}
7303
7304// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
7305// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
7306// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
7307// operation succeeded, the response body includes the HTTP status code for the successful request. If the
7308// asynchronous operation failed, the response body includes the HTTP status code for the failed request
7309// and error information regarding the failure.
7310type AzureAsyncOperationResult struct {
7311	// Status - Status of the Azure async operation. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
7312	Status OperationStatus `json:"status,omitempty"`
7313	// Error - Details of the error occurred during specified asynchronous operation.
7314	Error *Error `json:"error,omitempty"`
7315}
7316
7317// AzureFirewall azure Firewall resource.
7318type AzureFirewall struct {
7319	autorest.Response `json:"-"`
7320	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
7321	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
7322	// Zones - A list of availability zones denoting where the resource needs to come from.
7323	Zones *[]string `json:"zones,omitempty"`
7324	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7325	Etag *string `json:"etag,omitempty"`
7326	// ID - Resource ID.
7327	ID *string `json:"id,omitempty"`
7328	// Name - READ-ONLY; Resource name.
7329	Name *string `json:"name,omitempty"`
7330	// Type - READ-ONLY; Resource type.
7331	Type *string `json:"type,omitempty"`
7332	// Location - Resource location.
7333	Location *string `json:"location,omitempty"`
7334	// Tags - Resource tags.
7335	Tags map[string]*string `json:"tags"`
7336}
7337
7338// MarshalJSON is the custom marshaler for AzureFirewall.
7339func (af AzureFirewall) MarshalJSON() ([]byte, error) {
7340	objectMap := make(map[string]interface{})
7341	if af.AzureFirewallPropertiesFormat != nil {
7342		objectMap["properties"] = af.AzureFirewallPropertiesFormat
7343	}
7344	if af.Zones != nil {
7345		objectMap["zones"] = af.Zones
7346	}
7347	if af.ID != nil {
7348		objectMap["id"] = af.ID
7349	}
7350	if af.Location != nil {
7351		objectMap["location"] = af.Location
7352	}
7353	if af.Tags != nil {
7354		objectMap["tags"] = af.Tags
7355	}
7356	return json.Marshal(objectMap)
7357}
7358
7359// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
7360func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
7361	var m map[string]*json.RawMessage
7362	err := json.Unmarshal(body, &m)
7363	if err != nil {
7364		return err
7365	}
7366	for k, v := range m {
7367		switch k {
7368		case "properties":
7369			if v != nil {
7370				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
7371				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
7372				if err != nil {
7373					return err
7374				}
7375				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
7376			}
7377		case "zones":
7378			if v != nil {
7379				var zones []string
7380				err = json.Unmarshal(*v, &zones)
7381				if err != nil {
7382					return err
7383				}
7384				af.Zones = &zones
7385			}
7386		case "etag":
7387			if v != nil {
7388				var etag string
7389				err = json.Unmarshal(*v, &etag)
7390				if err != nil {
7391					return err
7392				}
7393				af.Etag = &etag
7394			}
7395		case "id":
7396			if v != nil {
7397				var ID string
7398				err = json.Unmarshal(*v, &ID)
7399				if err != nil {
7400					return err
7401				}
7402				af.ID = &ID
7403			}
7404		case "name":
7405			if v != nil {
7406				var name string
7407				err = json.Unmarshal(*v, &name)
7408				if err != nil {
7409					return err
7410				}
7411				af.Name = &name
7412			}
7413		case "type":
7414			if v != nil {
7415				var typeVar string
7416				err = json.Unmarshal(*v, &typeVar)
7417				if err != nil {
7418					return err
7419				}
7420				af.Type = &typeVar
7421			}
7422		case "location":
7423			if v != nil {
7424				var location string
7425				err = json.Unmarshal(*v, &location)
7426				if err != nil {
7427					return err
7428				}
7429				af.Location = &location
7430			}
7431		case "tags":
7432			if v != nil {
7433				var tags map[string]*string
7434				err = json.Unmarshal(*v, &tags)
7435				if err != nil {
7436					return err
7437				}
7438				af.Tags = tags
7439			}
7440		}
7441	}
7442
7443	return nil
7444}
7445
7446// AzureFirewallApplicationRule properties of an application rule.
7447type AzureFirewallApplicationRule struct {
7448	// Name - Name of the application rule.
7449	Name *string `json:"name,omitempty"`
7450	// Description - Description of the rule.
7451	Description *string `json:"description,omitempty"`
7452	// SourceAddresses - List of source IP addresses for this rule.
7453	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
7454	// Protocols - Array of ApplicationRuleProtocols.
7455	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
7456	// TargetFqdns - List of FQDNs for this rule.
7457	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
7458	// FqdnTags - List of FQDN Tags for this rule.
7459	FqdnTags *[]string `json:"fqdnTags,omitempty"`
7460	// SourceIPGroups - List of source IpGroups for this rule.
7461	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
7462}
7463
7464// AzureFirewallApplicationRuleCollection application rule collection resource.
7465type AzureFirewallApplicationRuleCollection struct {
7466	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
7467	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
7468	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
7469	Name *string `json:"name,omitempty"`
7470	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7471	Etag *string `json:"etag,omitempty"`
7472	// ID - Resource ID.
7473	ID *string `json:"id,omitempty"`
7474}
7475
7476// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
7477func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
7478	objectMap := make(map[string]interface{})
7479	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
7480		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
7481	}
7482	if afarc.Name != nil {
7483		objectMap["name"] = afarc.Name
7484	}
7485	if afarc.ID != nil {
7486		objectMap["id"] = afarc.ID
7487	}
7488	return json.Marshal(objectMap)
7489}
7490
7491// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
7492func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
7493	var m map[string]*json.RawMessage
7494	err := json.Unmarshal(body, &m)
7495	if err != nil {
7496		return err
7497	}
7498	for k, v := range m {
7499		switch k {
7500		case "properties":
7501			if v != nil {
7502				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
7503				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
7504				if err != nil {
7505					return err
7506				}
7507				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
7508			}
7509		case "name":
7510			if v != nil {
7511				var name string
7512				err = json.Unmarshal(*v, &name)
7513				if err != nil {
7514					return err
7515				}
7516				afarc.Name = &name
7517			}
7518		case "etag":
7519			if v != nil {
7520				var etag string
7521				err = json.Unmarshal(*v, &etag)
7522				if err != nil {
7523					return err
7524				}
7525				afarc.Etag = &etag
7526			}
7527		case "id":
7528			if v != nil {
7529				var ID string
7530				err = json.Unmarshal(*v, &ID)
7531				if err != nil {
7532					return err
7533				}
7534				afarc.ID = &ID
7535			}
7536		}
7537	}
7538
7539	return nil
7540}
7541
7542// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
7543type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
7544	// Priority - Priority of the application rule collection resource.
7545	Priority *int32 `json:"priority,omitempty"`
7546	// Action - The action type of a rule collection.
7547	Action *AzureFirewallRCAction `json:"action,omitempty"`
7548	// Rules - Collection of rules used by a application rule collection.
7549	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
7550	// ProvisioningState - READ-ONLY; The provisioning state of the application rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7551	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7552}
7553
7554// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
7555type AzureFirewallApplicationRuleProtocol struct {
7556	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS', 'AzureFirewallApplicationRuleProtocolTypeMssql'
7557	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
7558	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
7559	Port *int32 `json:"port,omitempty"`
7560}
7561
7562// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource.
7563type AzureFirewallFqdnTag struct {
7564	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
7565	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
7566	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7567	Etag *string `json:"etag,omitempty"`
7568	// ID - Resource ID.
7569	ID *string `json:"id,omitempty"`
7570	// Name - READ-ONLY; Resource name.
7571	Name *string `json:"name,omitempty"`
7572	// Type - READ-ONLY; Resource type.
7573	Type *string `json:"type,omitempty"`
7574	// Location - Resource location.
7575	Location *string `json:"location,omitempty"`
7576	// Tags - Resource tags.
7577	Tags map[string]*string `json:"tags"`
7578}
7579
7580// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
7581func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
7582	objectMap := make(map[string]interface{})
7583	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
7584		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
7585	}
7586	if afft.ID != nil {
7587		objectMap["id"] = afft.ID
7588	}
7589	if afft.Location != nil {
7590		objectMap["location"] = afft.Location
7591	}
7592	if afft.Tags != nil {
7593		objectMap["tags"] = afft.Tags
7594	}
7595	return json.Marshal(objectMap)
7596}
7597
7598// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
7599func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
7600	var m map[string]*json.RawMessage
7601	err := json.Unmarshal(body, &m)
7602	if err != nil {
7603		return err
7604	}
7605	for k, v := range m {
7606		switch k {
7607		case "properties":
7608			if v != nil {
7609				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
7610				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
7611				if err != nil {
7612					return err
7613				}
7614				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
7615			}
7616		case "etag":
7617			if v != nil {
7618				var etag string
7619				err = json.Unmarshal(*v, &etag)
7620				if err != nil {
7621					return err
7622				}
7623				afft.Etag = &etag
7624			}
7625		case "id":
7626			if v != nil {
7627				var ID string
7628				err = json.Unmarshal(*v, &ID)
7629				if err != nil {
7630					return err
7631				}
7632				afft.ID = &ID
7633			}
7634		case "name":
7635			if v != nil {
7636				var name string
7637				err = json.Unmarshal(*v, &name)
7638				if err != nil {
7639					return err
7640				}
7641				afft.Name = &name
7642			}
7643		case "type":
7644			if v != nil {
7645				var typeVar string
7646				err = json.Unmarshal(*v, &typeVar)
7647				if err != nil {
7648					return err
7649				}
7650				afft.Type = &typeVar
7651			}
7652		case "location":
7653			if v != nil {
7654				var location string
7655				err = json.Unmarshal(*v, &location)
7656				if err != nil {
7657					return err
7658				}
7659				afft.Location = &location
7660			}
7661		case "tags":
7662			if v != nil {
7663				var tags map[string]*string
7664				err = json.Unmarshal(*v, &tags)
7665				if err != nil {
7666					return err
7667				}
7668				afft.Tags = tags
7669			}
7670		}
7671	}
7672
7673	return nil
7674}
7675
7676// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
7677type AzureFirewallFqdnTagListResult struct {
7678	autorest.Response `json:"-"`
7679	// Value - List of Azure Firewall FQDN Tags in a resource group.
7680	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
7681	// NextLink - URL to get the next set of results.
7682	NextLink *string `json:"nextLink,omitempty"`
7683}
7684
7685// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
7686// values.
7687type AzureFirewallFqdnTagListResultIterator struct {
7688	i    int
7689	page AzureFirewallFqdnTagListResultPage
7690}
7691
7692// NextWithContext advances to the next value.  If there was an error making
7693// the request the iterator does not advance and the error is returned.
7694func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
7695	if tracing.IsEnabled() {
7696		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
7697		defer func() {
7698			sc := -1
7699			if iter.Response().Response.Response != nil {
7700				sc = iter.Response().Response.Response.StatusCode
7701			}
7702			tracing.EndSpan(ctx, sc, err)
7703		}()
7704	}
7705	iter.i++
7706	if iter.i < len(iter.page.Values()) {
7707		return nil
7708	}
7709	err = iter.page.NextWithContext(ctx)
7710	if err != nil {
7711		iter.i--
7712		return err
7713	}
7714	iter.i = 0
7715	return nil
7716}
7717
7718// Next advances to the next value.  If there was an error making
7719// the request the iterator does not advance and the error is returned.
7720// Deprecated: Use NextWithContext() instead.
7721func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
7722	return iter.NextWithContext(context.Background())
7723}
7724
7725// NotDone returns true if the enumeration should be started or is not yet complete.
7726func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
7727	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7728}
7729
7730// Response returns the raw server response from the last page request.
7731func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
7732	return iter.page.Response()
7733}
7734
7735// Value returns the current value or a zero-initialized value if the
7736// iterator has advanced beyond the end of the collection.
7737func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
7738	if !iter.page.NotDone() {
7739		return AzureFirewallFqdnTag{}
7740	}
7741	return iter.page.Values()[iter.i]
7742}
7743
7744// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
7745func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
7746	return AzureFirewallFqdnTagListResultIterator{page: page}
7747}
7748
7749// IsEmpty returns true if the ListResult contains no values.
7750func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
7751	return afftlr.Value == nil || len(*afftlr.Value) == 0
7752}
7753
7754// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
7755// It returns nil if no more results exist.
7756func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
7757	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
7758		return nil, nil
7759	}
7760	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7761		autorest.AsJSON(),
7762		autorest.AsGet(),
7763		autorest.WithBaseURL(to.String(afftlr.NextLink)))
7764}
7765
7766// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
7767type AzureFirewallFqdnTagListResultPage struct {
7768	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
7769	afftlr AzureFirewallFqdnTagListResult
7770}
7771
7772// NextWithContext advances to the next page of values.  If there was an error making
7773// the request the page does not advance and the error is returned.
7774func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
7775	if tracing.IsEnabled() {
7776		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
7777		defer func() {
7778			sc := -1
7779			if page.Response().Response.Response != nil {
7780				sc = page.Response().Response.Response.StatusCode
7781			}
7782			tracing.EndSpan(ctx, sc, err)
7783		}()
7784	}
7785	next, err := page.fn(ctx, page.afftlr)
7786	if err != nil {
7787		return err
7788	}
7789	page.afftlr = next
7790	return nil
7791}
7792
7793// Next advances to the next page of values.  If there was an error making
7794// the request the page does not advance and the error is returned.
7795// Deprecated: Use NextWithContext() instead.
7796func (page *AzureFirewallFqdnTagListResultPage) Next() error {
7797	return page.NextWithContext(context.Background())
7798}
7799
7800// NotDone returns true if the page enumeration should be started or is not yet complete.
7801func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
7802	return !page.afftlr.IsEmpty()
7803}
7804
7805// Response returns the raw server response from the last page request.
7806func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
7807	return page.afftlr
7808}
7809
7810// Values returns the slice of values for the current page or nil if there are no values.
7811func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
7812	if page.afftlr.IsEmpty() {
7813		return nil
7814	}
7815	return *page.afftlr.Value
7816}
7817
7818// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
7819func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
7820	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
7821}
7822
7823// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties.
7824type AzureFirewallFqdnTagPropertiesFormat struct {
7825	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall FQDN tag resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7826	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7827	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
7828	FqdnTagName *string `json:"fqdnTagName,omitempty"`
7829}
7830
7831// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
7832type AzureFirewallIPConfiguration struct {
7833	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
7834	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7835	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
7836	Name *string `json:"name,omitempty"`
7837	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7838	Etag *string `json:"etag,omitempty"`
7839	// Type - READ-ONLY; Type of the resource.
7840	Type *string `json:"type,omitempty"`
7841	// ID - Resource ID.
7842	ID *string `json:"id,omitempty"`
7843}
7844
7845// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
7846func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
7847	objectMap := make(map[string]interface{})
7848	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
7849		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
7850	}
7851	if afic.Name != nil {
7852		objectMap["name"] = afic.Name
7853	}
7854	if afic.ID != nil {
7855		objectMap["id"] = afic.ID
7856	}
7857	return json.Marshal(objectMap)
7858}
7859
7860// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
7861func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
7862	var m map[string]*json.RawMessage
7863	err := json.Unmarshal(body, &m)
7864	if err != nil {
7865		return err
7866	}
7867	for k, v := range m {
7868		switch k {
7869		case "properties":
7870			if v != nil {
7871				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
7872				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
7873				if err != nil {
7874					return err
7875				}
7876				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
7877			}
7878		case "name":
7879			if v != nil {
7880				var name string
7881				err = json.Unmarshal(*v, &name)
7882				if err != nil {
7883					return err
7884				}
7885				afic.Name = &name
7886			}
7887		case "etag":
7888			if v != nil {
7889				var etag string
7890				err = json.Unmarshal(*v, &etag)
7891				if err != nil {
7892					return err
7893				}
7894				afic.Etag = &etag
7895			}
7896		case "type":
7897			if v != nil {
7898				var typeVar string
7899				err = json.Unmarshal(*v, &typeVar)
7900				if err != nil {
7901					return err
7902				}
7903				afic.Type = &typeVar
7904			}
7905		case "id":
7906			if v != nil {
7907				var ID string
7908				err = json.Unmarshal(*v, &ID)
7909				if err != nil {
7910					return err
7911				}
7912				afic.ID = &ID
7913			}
7914		}
7915	}
7916
7917	return nil
7918}
7919
7920// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
7921type AzureFirewallIPConfigurationPropertiesFormat struct {
7922	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
7923	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
7924	// Subnet - Reference to the subnet resource. This resource must be named 'AzureFirewallSubnet' or 'AzureFirewallManagementSubnet'.
7925	Subnet *SubResource `json:"subnet,omitempty"`
7926	// PublicIPAddress - Reference to the PublicIP resource. This field is a mandatory input if subnet is not null.
7927	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
7928	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7929	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7930}
7931
7932// AzureFirewallIPGroups ipGroups associated with azure firewall.
7933type AzureFirewallIPGroups struct {
7934	// ID - READ-ONLY; Resource ID.
7935	ID *string `json:"id,omitempty"`
7936	// ChangeNumber - READ-ONLY; The iteration number.
7937	ChangeNumber *string `json:"changeNumber,omitempty"`
7938}
7939
7940// AzureFirewallListResult response for ListAzureFirewalls API service call.
7941type AzureFirewallListResult struct {
7942	autorest.Response `json:"-"`
7943	// Value - List of Azure Firewalls in a resource group.
7944	Value *[]AzureFirewall `json:"value,omitempty"`
7945	// NextLink - URL to get the next set of results.
7946	NextLink *string `json:"nextLink,omitempty"`
7947}
7948
7949// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
7950type AzureFirewallListResultIterator struct {
7951	i    int
7952	page AzureFirewallListResultPage
7953}
7954
7955// NextWithContext advances to the next value.  If there was an error making
7956// the request the iterator does not advance and the error is returned.
7957func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
7958	if tracing.IsEnabled() {
7959		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
7960		defer func() {
7961			sc := -1
7962			if iter.Response().Response.Response != nil {
7963				sc = iter.Response().Response.Response.StatusCode
7964			}
7965			tracing.EndSpan(ctx, sc, err)
7966		}()
7967	}
7968	iter.i++
7969	if iter.i < len(iter.page.Values()) {
7970		return nil
7971	}
7972	err = iter.page.NextWithContext(ctx)
7973	if err != nil {
7974		iter.i--
7975		return err
7976	}
7977	iter.i = 0
7978	return nil
7979}
7980
7981// Next advances to the next value.  If there was an error making
7982// the request the iterator does not advance and the error is returned.
7983// Deprecated: Use NextWithContext() instead.
7984func (iter *AzureFirewallListResultIterator) Next() error {
7985	return iter.NextWithContext(context.Background())
7986}
7987
7988// NotDone returns true if the enumeration should be started or is not yet complete.
7989func (iter AzureFirewallListResultIterator) NotDone() bool {
7990	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7991}
7992
7993// Response returns the raw server response from the last page request.
7994func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
7995	return iter.page.Response()
7996}
7997
7998// Value returns the current value or a zero-initialized value if the
7999// iterator has advanced beyond the end of the collection.
8000func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
8001	if !iter.page.NotDone() {
8002		return AzureFirewall{}
8003	}
8004	return iter.page.Values()[iter.i]
8005}
8006
8007// Creates a new instance of the AzureFirewallListResultIterator type.
8008func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
8009	return AzureFirewallListResultIterator{page: page}
8010}
8011
8012// IsEmpty returns true if the ListResult contains no values.
8013func (aflr AzureFirewallListResult) IsEmpty() bool {
8014	return aflr.Value == nil || len(*aflr.Value) == 0
8015}
8016
8017// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
8018// It returns nil if no more results exist.
8019func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
8020	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
8021		return nil, nil
8022	}
8023	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8024		autorest.AsJSON(),
8025		autorest.AsGet(),
8026		autorest.WithBaseURL(to.String(aflr.NextLink)))
8027}
8028
8029// AzureFirewallListResultPage contains a page of AzureFirewall values.
8030type AzureFirewallListResultPage struct {
8031	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
8032	aflr AzureFirewallListResult
8033}
8034
8035// NextWithContext advances to the next page of values.  If there was an error making
8036// the request the page does not advance and the error is returned.
8037func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
8038	if tracing.IsEnabled() {
8039		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
8040		defer func() {
8041			sc := -1
8042			if page.Response().Response.Response != nil {
8043				sc = page.Response().Response.Response.StatusCode
8044			}
8045			tracing.EndSpan(ctx, sc, err)
8046		}()
8047	}
8048	next, err := page.fn(ctx, page.aflr)
8049	if err != nil {
8050		return err
8051	}
8052	page.aflr = next
8053	return nil
8054}
8055
8056// Next advances to the next page of values.  If there was an error making
8057// the request the page does not advance and the error is returned.
8058// Deprecated: Use NextWithContext() instead.
8059func (page *AzureFirewallListResultPage) Next() error {
8060	return page.NextWithContext(context.Background())
8061}
8062
8063// NotDone returns true if the page enumeration should be started or is not yet complete.
8064func (page AzureFirewallListResultPage) NotDone() bool {
8065	return !page.aflr.IsEmpty()
8066}
8067
8068// Response returns the raw server response from the last page request.
8069func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
8070	return page.aflr
8071}
8072
8073// Values returns the slice of values for the current page or nil if there are no values.
8074func (page AzureFirewallListResultPage) Values() []AzureFirewall {
8075	if page.aflr.IsEmpty() {
8076		return nil
8077	}
8078	return *page.aflr.Value
8079}
8080
8081// Creates a new instance of the AzureFirewallListResultPage type.
8082func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
8083	return AzureFirewallListResultPage{fn: getNextPage}
8084}
8085
8086// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
8087type AzureFirewallNatRCAction struct {
8088	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
8089	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
8090}
8091
8092// AzureFirewallNatRule properties of a NAT rule.
8093type AzureFirewallNatRule struct {
8094	// Name - Name of the NAT rule.
8095	Name *string `json:"name,omitempty"`
8096	// Description - Description of the rule.
8097	Description *string `json:"description,omitempty"`
8098	// SourceAddresses - List of source IP addresses for this rule.
8099	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
8100	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
8101	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
8102	// DestinationPorts - List of destination ports.
8103	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
8104	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
8105	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
8106	// TranslatedAddress - The translated address for this NAT rule.
8107	TranslatedAddress *string `json:"translatedAddress,omitempty"`
8108	// TranslatedPort - The translated port for this NAT rule.
8109	TranslatedPort *string `json:"translatedPort,omitempty"`
8110	// TranslatedFqdn - The translated FQDN for this NAT rule.
8111	TranslatedFqdn *string `json:"translatedFqdn,omitempty"`
8112	// SourceIPGroups - List of source IpGroups for this rule.
8113	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
8114}
8115
8116// AzureFirewallNatRuleCollection NAT rule collection resource.
8117type AzureFirewallNatRuleCollection struct {
8118	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
8119	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
8120	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
8121	Name *string `json:"name,omitempty"`
8122	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8123	Etag *string `json:"etag,omitempty"`
8124	// ID - Resource ID.
8125	ID *string `json:"id,omitempty"`
8126}
8127
8128// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
8129func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
8130	objectMap := make(map[string]interface{})
8131	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
8132		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
8133	}
8134	if afnrc.Name != nil {
8135		objectMap["name"] = afnrc.Name
8136	}
8137	if afnrc.ID != nil {
8138		objectMap["id"] = afnrc.ID
8139	}
8140	return json.Marshal(objectMap)
8141}
8142
8143// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
8144func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
8145	var m map[string]*json.RawMessage
8146	err := json.Unmarshal(body, &m)
8147	if err != nil {
8148		return err
8149	}
8150	for k, v := range m {
8151		switch k {
8152		case "properties":
8153			if v != nil {
8154				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
8155				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
8156				if err != nil {
8157					return err
8158				}
8159				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
8160			}
8161		case "name":
8162			if v != nil {
8163				var name string
8164				err = json.Unmarshal(*v, &name)
8165				if err != nil {
8166					return err
8167				}
8168				afnrc.Name = &name
8169			}
8170		case "etag":
8171			if v != nil {
8172				var etag string
8173				err = json.Unmarshal(*v, &etag)
8174				if err != nil {
8175					return err
8176				}
8177				afnrc.Etag = &etag
8178			}
8179		case "id":
8180			if v != nil {
8181				var ID string
8182				err = json.Unmarshal(*v, &ID)
8183				if err != nil {
8184					return err
8185				}
8186				afnrc.ID = &ID
8187			}
8188		}
8189	}
8190
8191	return nil
8192}
8193
8194// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
8195type AzureFirewallNatRuleCollectionProperties struct {
8196	// Priority - Priority of the NAT rule collection resource.
8197	Priority *int32 `json:"priority,omitempty"`
8198	// Action - The action type of a NAT rule collection.
8199	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
8200	// Rules - Collection of rules used by a NAT rule collection.
8201	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
8202	// ProvisioningState - READ-ONLY; The provisioning state of the NAT rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8203	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8204}
8205
8206// AzureFirewallNetworkRule properties of the network rule.
8207type AzureFirewallNetworkRule struct {
8208	// Name - Name of the network rule.
8209	Name *string `json:"name,omitempty"`
8210	// Description - Description of the rule.
8211	Description *string `json:"description,omitempty"`
8212	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
8213	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
8214	// SourceAddresses - List of source IP addresses for this rule.
8215	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
8216	// DestinationAddresses - List of destination IP addresses.
8217	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
8218	// DestinationPorts - List of destination ports.
8219	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
8220	// DestinationFqdns - List of destination FQDNs.
8221	DestinationFqdns *[]string `json:"destinationFqdns,omitempty"`
8222	// SourceIPGroups - List of source IpGroups for this rule.
8223	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
8224	// DestinationIPGroups - List of destination IpGroups for this rule.
8225	DestinationIPGroups *[]string `json:"destinationIpGroups,omitempty"`
8226}
8227
8228// AzureFirewallNetworkRuleCollection network rule collection resource.
8229type AzureFirewallNetworkRuleCollection struct {
8230	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
8231	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
8232	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
8233	Name *string `json:"name,omitempty"`
8234	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8235	Etag *string `json:"etag,omitempty"`
8236	// ID - Resource ID.
8237	ID *string `json:"id,omitempty"`
8238}
8239
8240// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
8241func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
8242	objectMap := make(map[string]interface{})
8243	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
8244		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
8245	}
8246	if afnrc.Name != nil {
8247		objectMap["name"] = afnrc.Name
8248	}
8249	if afnrc.ID != nil {
8250		objectMap["id"] = afnrc.ID
8251	}
8252	return json.Marshal(objectMap)
8253}
8254
8255// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
8256func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
8257	var m map[string]*json.RawMessage
8258	err := json.Unmarshal(body, &m)
8259	if err != nil {
8260		return err
8261	}
8262	for k, v := range m {
8263		switch k {
8264		case "properties":
8265			if v != nil {
8266				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
8267				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
8268				if err != nil {
8269					return err
8270				}
8271				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
8272			}
8273		case "name":
8274			if v != nil {
8275				var name string
8276				err = json.Unmarshal(*v, &name)
8277				if err != nil {
8278					return err
8279				}
8280				afnrc.Name = &name
8281			}
8282		case "etag":
8283			if v != nil {
8284				var etag string
8285				err = json.Unmarshal(*v, &etag)
8286				if err != nil {
8287					return err
8288				}
8289				afnrc.Etag = &etag
8290			}
8291		case "id":
8292			if v != nil {
8293				var ID string
8294				err = json.Unmarshal(*v, &ID)
8295				if err != nil {
8296					return err
8297				}
8298				afnrc.ID = &ID
8299			}
8300		}
8301	}
8302
8303	return nil
8304}
8305
8306// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
8307type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
8308	// Priority - Priority of the network rule collection resource.
8309	Priority *int32 `json:"priority,omitempty"`
8310	// Action - The action type of a rule collection.
8311	Action *AzureFirewallRCAction `json:"action,omitempty"`
8312	// Rules - Collection of rules used by a network rule collection.
8313	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
8314	// ProvisioningState - READ-ONLY; The provisioning state of the network rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8315	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8316}
8317
8318// AzureFirewallPropertiesFormat properties of the Azure Firewall.
8319type AzureFirewallPropertiesFormat struct {
8320	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
8321	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
8322	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
8323	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
8324	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
8325	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
8326	// IPConfigurations - IP configuration of the Azure Firewall resource.
8327	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
8328	// ManagementIPConfiguration - IP configuration of the Azure Firewall used for management traffic.
8329	ManagementIPConfiguration *AzureFirewallIPConfiguration `json:"managementIpConfiguration,omitempty"`
8330	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8331	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8332	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
8333	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
8334	// VirtualHub - The virtualHub to which the firewall belongs.
8335	VirtualHub *SubResource `json:"virtualHub,omitempty"`
8336	// FirewallPolicy - The firewallPolicy associated with this azure firewall.
8337	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
8338	// HubIPAddresses - IP addresses associated with AzureFirewall.
8339	HubIPAddresses *HubIPAddresses `json:"hubIPAddresses,omitempty"`
8340	// IPGroups - READ-ONLY; IpGroups associated with AzureFirewall.
8341	IPGroups *[]AzureFirewallIPGroups `json:"ipGroups,omitempty"`
8342	// Sku - The Azure Firewall Resource SKU.
8343	Sku *AzureFirewallSku `json:"sku,omitempty"`
8344	// AdditionalProperties - The additional properties used to further config this azure firewall.
8345	AdditionalProperties map[string]*string `json:"additionalProperties"`
8346}
8347
8348// MarshalJSON is the custom marshaler for AzureFirewallPropertiesFormat.
8349func (afpf AzureFirewallPropertiesFormat) MarshalJSON() ([]byte, error) {
8350	objectMap := make(map[string]interface{})
8351	if afpf.ApplicationRuleCollections != nil {
8352		objectMap["applicationRuleCollections"] = afpf.ApplicationRuleCollections
8353	}
8354	if afpf.NatRuleCollections != nil {
8355		objectMap["natRuleCollections"] = afpf.NatRuleCollections
8356	}
8357	if afpf.NetworkRuleCollections != nil {
8358		objectMap["networkRuleCollections"] = afpf.NetworkRuleCollections
8359	}
8360	if afpf.IPConfigurations != nil {
8361		objectMap["ipConfigurations"] = afpf.IPConfigurations
8362	}
8363	if afpf.ManagementIPConfiguration != nil {
8364		objectMap["managementIpConfiguration"] = afpf.ManagementIPConfiguration
8365	}
8366	if afpf.ThreatIntelMode != "" {
8367		objectMap["threatIntelMode"] = afpf.ThreatIntelMode
8368	}
8369	if afpf.VirtualHub != nil {
8370		objectMap["virtualHub"] = afpf.VirtualHub
8371	}
8372	if afpf.FirewallPolicy != nil {
8373		objectMap["firewallPolicy"] = afpf.FirewallPolicy
8374	}
8375	if afpf.HubIPAddresses != nil {
8376		objectMap["hubIPAddresses"] = afpf.HubIPAddresses
8377	}
8378	if afpf.Sku != nil {
8379		objectMap["sku"] = afpf.Sku
8380	}
8381	if afpf.AdditionalProperties != nil {
8382		objectMap["additionalProperties"] = afpf.AdditionalProperties
8383	}
8384	return json.Marshal(objectMap)
8385}
8386
8387// AzureFirewallPublicIPAddress public IP Address associated with azure firewall.
8388type AzureFirewallPublicIPAddress struct {
8389	// Address - Public IP Address value.
8390	Address *string `json:"address,omitempty"`
8391}
8392
8393// AzureFirewallRCAction properties of the AzureFirewallRCAction.
8394type AzureFirewallRCAction struct {
8395	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
8396	Type AzureFirewallRCActionType `json:"type,omitempty"`
8397}
8398
8399// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8400// long-running operation.
8401type AzureFirewallsCreateOrUpdateFuture struct {
8402	azure.Future
8403}
8404
8405// Result returns the result of the asynchronous operation.
8406// If the operation has not completed it will return an error.
8407func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
8408	var done bool
8409	done, err = future.DoneWithContext(context.Background(), client)
8410	if err != nil {
8411		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8412		return
8413	}
8414	if !done {
8415		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
8416		return
8417	}
8418	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8419	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
8420		af, err = client.CreateOrUpdateResponder(af.Response.Response)
8421		if err != nil {
8422			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
8423		}
8424	}
8425	return
8426}
8427
8428// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
8429// operation.
8430type AzureFirewallsDeleteFuture struct {
8431	azure.Future
8432}
8433
8434// Result returns the result of the asynchronous operation.
8435// If the operation has not completed it will return an error.
8436func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
8437	var done bool
8438	done, err = future.DoneWithContext(context.Background(), client)
8439	if err != nil {
8440		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
8441		return
8442	}
8443	if !done {
8444		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
8445		return
8446	}
8447	ar.Response = future.Response()
8448	return
8449}
8450
8451// AzureFirewallSku SKU of an Azure Firewall.
8452type AzureFirewallSku struct {
8453	// Name - Name of an Azure Firewall SKU. Possible values include: 'AZFWVNet', 'AZFWHub'
8454	Name AzureFirewallSkuName `json:"name,omitempty"`
8455	// Tier - Tier of an Azure Firewall. Possible values include: 'Standard', 'Premium'
8456	Tier AzureFirewallSkuTier `json:"tier,omitempty"`
8457}
8458
8459// AzureFirewallsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
8460// long-running operation.
8461type AzureFirewallsUpdateTagsFuture struct {
8462	azure.Future
8463}
8464
8465// Result returns the result of the asynchronous operation.
8466// If the operation has not completed it will return an error.
8467func (future *AzureFirewallsUpdateTagsFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
8468	var done bool
8469	done, err = future.DoneWithContext(context.Background(), client)
8470	if err != nil {
8471		err = autorest.NewErrorWithError(err, "network.AzureFirewallsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
8472		return
8473	}
8474	if !done {
8475		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsUpdateTagsFuture")
8476		return
8477	}
8478	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8479	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
8480		af, err = client.UpdateTagsResponder(af.Response.Response)
8481		if err != nil {
8482			err = autorest.NewErrorWithError(err, "network.AzureFirewallsUpdateTagsFuture", "Result", af.Response.Response, "Failure responding to request")
8483		}
8484	}
8485	return
8486}
8487
8488// AzureReachabilityReport azure reachability report details.
8489type AzureReachabilityReport struct {
8490	autorest.Response `json:"-"`
8491	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
8492	AggregationLevel *string `json:"aggregationLevel,omitempty"`
8493	// ProviderLocation - Parameters that define a geographic location.
8494	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
8495	// ReachabilityReport - List of Azure reachability report items.
8496	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
8497}
8498
8499// AzureReachabilityReportItem azure reachability report details for a given provider location.
8500type AzureReachabilityReportItem struct {
8501	// Provider - The Internet service provider.
8502	Provider *string `json:"provider,omitempty"`
8503	// AzureLocation - The Azure region.
8504	AzureLocation *string `json:"azureLocation,omitempty"`
8505	// Latencies - List of latency details for each of the time series.
8506	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
8507}
8508
8509// AzureReachabilityReportLatencyInfo details on latency for a time series.
8510type AzureReachabilityReportLatencyInfo struct {
8511	// TimeStamp - The time stamp.
8512	TimeStamp *date.Time `json:"timeStamp,omitempty"`
8513	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
8514	Score *int32 `json:"score,omitempty"`
8515}
8516
8517// AzureReachabilityReportLocation parameters that define a geographic location.
8518type AzureReachabilityReportLocation struct {
8519	// Country - The name of the country.
8520	Country *string `json:"country,omitempty"`
8521	// State - The name of the state.
8522	State *string `json:"state,omitempty"`
8523	// City - The name of the city or town.
8524	City *string `json:"city,omitempty"`
8525}
8526
8527// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
8528type AzureReachabilityReportParameters struct {
8529	// ProviderLocation - Parameters that define a geographic location.
8530	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
8531	// Providers - List of Internet service providers.
8532	Providers *[]string `json:"providers,omitempty"`
8533	// AzureLocations - Optional Azure regions to scope the query to.
8534	AzureLocations *[]string `json:"azureLocations,omitempty"`
8535	// StartTime - The start time for the Azure reachability report.
8536	StartTime *date.Time `json:"startTime,omitempty"`
8537	// EndTime - The end time for the Azure reachability report.
8538	EndTime *date.Time `json:"endTime,omitempty"`
8539}
8540
8541// BackendAddressPool pool of backend IP addresses.
8542type BackendAddressPool struct {
8543	autorest.Response `json:"-"`
8544	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
8545	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
8546	// Name - The name of the resource that is unique within the set of backend address pools used by the load balancer. This name can be used to access the resource.
8547	Name *string `json:"name,omitempty"`
8548	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8549	Etag *string `json:"etag,omitempty"`
8550	// Type - READ-ONLY; Type of the resource.
8551	Type *string `json:"type,omitempty"`
8552	// ID - Resource ID.
8553	ID *string `json:"id,omitempty"`
8554}
8555
8556// MarshalJSON is the custom marshaler for BackendAddressPool.
8557func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
8558	objectMap := make(map[string]interface{})
8559	if bap.BackendAddressPoolPropertiesFormat != nil {
8560		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
8561	}
8562	if bap.Name != nil {
8563		objectMap["name"] = bap.Name
8564	}
8565	if bap.ID != nil {
8566		objectMap["id"] = bap.ID
8567	}
8568	return json.Marshal(objectMap)
8569}
8570
8571// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
8572func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
8573	var m map[string]*json.RawMessage
8574	err := json.Unmarshal(body, &m)
8575	if err != nil {
8576		return err
8577	}
8578	for k, v := range m {
8579		switch k {
8580		case "properties":
8581			if v != nil {
8582				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
8583				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
8584				if err != nil {
8585					return err
8586				}
8587				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
8588			}
8589		case "name":
8590			if v != nil {
8591				var name string
8592				err = json.Unmarshal(*v, &name)
8593				if err != nil {
8594					return err
8595				}
8596				bap.Name = &name
8597			}
8598		case "etag":
8599			if v != nil {
8600				var etag string
8601				err = json.Unmarshal(*v, &etag)
8602				if err != nil {
8603					return err
8604				}
8605				bap.Etag = &etag
8606			}
8607		case "type":
8608			if v != nil {
8609				var typeVar string
8610				err = json.Unmarshal(*v, &typeVar)
8611				if err != nil {
8612					return err
8613				}
8614				bap.Type = &typeVar
8615			}
8616		case "id":
8617			if v != nil {
8618				var ID string
8619				err = json.Unmarshal(*v, &ID)
8620				if err != nil {
8621					return err
8622				}
8623				bap.ID = &ID
8624			}
8625		}
8626	}
8627
8628	return nil
8629}
8630
8631// BackendAddressPoolPropertiesFormat properties of the backend address pool.
8632type BackendAddressPoolPropertiesFormat struct {
8633	// BackendIPConfigurations - READ-ONLY; An array of references to IP addresses defined in network interfaces.
8634	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
8635	// LoadBalancerBackendAddresses - An array of backend addresses.
8636	LoadBalancerBackendAddresses *[]LoadBalancerBackendAddress `json:"loadBalancerBackendAddresses,omitempty"`
8637	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this backend address pool.
8638	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
8639	// OutboundRule - READ-ONLY; A reference to an outbound rule that uses this backend address pool.
8640	OutboundRule *SubResource `json:"outboundRule,omitempty"`
8641	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this backend address pool.
8642	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
8643	// ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8644	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8645}
8646
8647// BastionActiveSession the session detail for a target.
8648type BastionActiveSession struct {
8649	// SessionID - READ-ONLY; A unique id for the session.
8650	SessionID *string `json:"sessionId,omitempty"`
8651	// StartTime - READ-ONLY; The time when the session started.
8652	StartTime interface{} `json:"startTime,omitempty"`
8653	// TargetSubscriptionID - READ-ONLY; The subscription id for the target virtual machine.
8654	TargetSubscriptionID *string `json:"targetSubscriptionId,omitempty"`
8655	// ResourceType - READ-ONLY; The type of the resource.
8656	ResourceType *string `json:"resourceType,omitempty"`
8657	// TargetHostName - READ-ONLY; The host name of the target.
8658	TargetHostName *string `json:"targetHostName,omitempty"`
8659	// TargetResourceGroup - READ-ONLY; The resource group of the target.
8660	TargetResourceGroup *string `json:"targetResourceGroup,omitempty"`
8661	// UserName - READ-ONLY; The user name who is active on this session.
8662	UserName *string `json:"userName,omitempty"`
8663	// TargetIPAddress - READ-ONLY; The IP Address of the target.
8664	TargetIPAddress *string `json:"targetIpAddress,omitempty"`
8665	// Protocol - READ-ONLY; The protocol used to connect to the target. Possible values include: 'SSH', 'RDP'
8666	Protocol BastionConnectProtocol `json:"protocol,omitempty"`
8667	// TargetResourceID - READ-ONLY; The resource id of the target.
8668	TargetResourceID *string `json:"targetResourceId,omitempty"`
8669	// SessionDurationInMins - READ-ONLY; Duration in mins the session has been active.
8670	SessionDurationInMins *float64 `json:"sessionDurationInMins,omitempty"`
8671}
8672
8673// BastionActiveSessionListResult response for GetActiveSessions.
8674type BastionActiveSessionListResult struct {
8675	autorest.Response `json:"-"`
8676	// Value - List of active sessions on the bastion.
8677	Value *[]BastionActiveSession `json:"value,omitempty"`
8678	// NextLink - The URL to get the next set of results.
8679	NextLink *string `json:"nextLink,omitempty"`
8680}
8681
8682// BastionActiveSessionListResultIterator provides access to a complete listing of BastionActiveSession
8683// values.
8684type BastionActiveSessionListResultIterator struct {
8685	i    int
8686	page BastionActiveSessionListResultPage
8687}
8688
8689// NextWithContext advances to the next value.  If there was an error making
8690// the request the iterator does not advance and the error is returned.
8691func (iter *BastionActiveSessionListResultIterator) NextWithContext(ctx context.Context) (err error) {
8692	if tracing.IsEnabled() {
8693		ctx = tracing.StartSpan(ctx, fqdn+"/BastionActiveSessionListResultIterator.NextWithContext")
8694		defer func() {
8695			sc := -1
8696			if iter.Response().Response.Response != nil {
8697				sc = iter.Response().Response.Response.StatusCode
8698			}
8699			tracing.EndSpan(ctx, sc, err)
8700		}()
8701	}
8702	iter.i++
8703	if iter.i < len(iter.page.Values()) {
8704		return nil
8705	}
8706	err = iter.page.NextWithContext(ctx)
8707	if err != nil {
8708		iter.i--
8709		return err
8710	}
8711	iter.i = 0
8712	return nil
8713}
8714
8715// Next advances to the next value.  If there was an error making
8716// the request the iterator does not advance and the error is returned.
8717// Deprecated: Use NextWithContext() instead.
8718func (iter *BastionActiveSessionListResultIterator) Next() error {
8719	return iter.NextWithContext(context.Background())
8720}
8721
8722// NotDone returns true if the enumeration should be started or is not yet complete.
8723func (iter BastionActiveSessionListResultIterator) NotDone() bool {
8724	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8725}
8726
8727// Response returns the raw server response from the last page request.
8728func (iter BastionActiveSessionListResultIterator) Response() BastionActiveSessionListResult {
8729	return iter.page.Response()
8730}
8731
8732// Value returns the current value or a zero-initialized value if the
8733// iterator has advanced beyond the end of the collection.
8734func (iter BastionActiveSessionListResultIterator) Value() BastionActiveSession {
8735	if !iter.page.NotDone() {
8736		return BastionActiveSession{}
8737	}
8738	return iter.page.Values()[iter.i]
8739}
8740
8741// Creates a new instance of the BastionActiveSessionListResultIterator type.
8742func NewBastionActiveSessionListResultIterator(page BastionActiveSessionListResultPage) BastionActiveSessionListResultIterator {
8743	return BastionActiveSessionListResultIterator{page: page}
8744}
8745
8746// IsEmpty returns true if the ListResult contains no values.
8747func (baslr BastionActiveSessionListResult) IsEmpty() bool {
8748	return baslr.Value == nil || len(*baslr.Value) == 0
8749}
8750
8751// bastionActiveSessionListResultPreparer prepares a request to retrieve the next set of results.
8752// It returns nil if no more results exist.
8753func (baslr BastionActiveSessionListResult) bastionActiveSessionListResultPreparer(ctx context.Context) (*http.Request, error) {
8754	if baslr.NextLink == nil || len(to.String(baslr.NextLink)) < 1 {
8755		return nil, nil
8756	}
8757	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8758		autorest.AsJSON(),
8759		autorest.AsGet(),
8760		autorest.WithBaseURL(to.String(baslr.NextLink)))
8761}
8762
8763// BastionActiveSessionListResultPage contains a page of BastionActiveSession values.
8764type BastionActiveSessionListResultPage struct {
8765	fn    func(context.Context, BastionActiveSessionListResult) (BastionActiveSessionListResult, error)
8766	baslr BastionActiveSessionListResult
8767}
8768
8769// NextWithContext advances to the next page of values.  If there was an error making
8770// the request the page does not advance and the error is returned.
8771func (page *BastionActiveSessionListResultPage) NextWithContext(ctx context.Context) (err error) {
8772	if tracing.IsEnabled() {
8773		ctx = tracing.StartSpan(ctx, fqdn+"/BastionActiveSessionListResultPage.NextWithContext")
8774		defer func() {
8775			sc := -1
8776			if page.Response().Response.Response != nil {
8777				sc = page.Response().Response.Response.StatusCode
8778			}
8779			tracing.EndSpan(ctx, sc, err)
8780		}()
8781	}
8782	next, err := page.fn(ctx, page.baslr)
8783	if err != nil {
8784		return err
8785	}
8786	page.baslr = next
8787	return nil
8788}
8789
8790// Next advances to the next page of values.  If there was an error making
8791// the request the page does not advance and the error is returned.
8792// Deprecated: Use NextWithContext() instead.
8793func (page *BastionActiveSessionListResultPage) Next() error {
8794	return page.NextWithContext(context.Background())
8795}
8796
8797// NotDone returns true if the page enumeration should be started or is not yet complete.
8798func (page BastionActiveSessionListResultPage) NotDone() bool {
8799	return !page.baslr.IsEmpty()
8800}
8801
8802// Response returns the raw server response from the last page request.
8803func (page BastionActiveSessionListResultPage) Response() BastionActiveSessionListResult {
8804	return page.baslr
8805}
8806
8807// Values returns the slice of values for the current page or nil if there are no values.
8808func (page BastionActiveSessionListResultPage) Values() []BastionActiveSession {
8809	if page.baslr.IsEmpty() {
8810		return nil
8811	}
8812	return *page.baslr.Value
8813}
8814
8815// Creates a new instance of the BastionActiveSessionListResultPage type.
8816func NewBastionActiveSessionListResultPage(getNextPage func(context.Context, BastionActiveSessionListResult) (BastionActiveSessionListResult, error)) BastionActiveSessionListResultPage {
8817	return BastionActiveSessionListResultPage{fn: getNextPage}
8818}
8819
8820// BastionHost bastion Host resource.
8821type BastionHost struct {
8822	autorest.Response `json:"-"`
8823	// BastionHostPropertiesFormat - Represents the bastion host resource.
8824	*BastionHostPropertiesFormat `json:"properties,omitempty"`
8825	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8826	Etag *string `json:"etag,omitempty"`
8827	// ID - Resource ID.
8828	ID *string `json:"id,omitempty"`
8829	// Name - READ-ONLY; Resource name.
8830	Name *string `json:"name,omitempty"`
8831	// Type - READ-ONLY; Resource type.
8832	Type *string `json:"type,omitempty"`
8833	// Location - Resource location.
8834	Location *string `json:"location,omitempty"`
8835	// Tags - Resource tags.
8836	Tags map[string]*string `json:"tags"`
8837}
8838
8839// MarshalJSON is the custom marshaler for BastionHost.
8840func (bh BastionHost) MarshalJSON() ([]byte, error) {
8841	objectMap := make(map[string]interface{})
8842	if bh.BastionHostPropertiesFormat != nil {
8843		objectMap["properties"] = bh.BastionHostPropertiesFormat
8844	}
8845	if bh.ID != nil {
8846		objectMap["id"] = bh.ID
8847	}
8848	if bh.Location != nil {
8849		objectMap["location"] = bh.Location
8850	}
8851	if bh.Tags != nil {
8852		objectMap["tags"] = bh.Tags
8853	}
8854	return json.Marshal(objectMap)
8855}
8856
8857// UnmarshalJSON is the custom unmarshaler for BastionHost struct.
8858func (bh *BastionHost) UnmarshalJSON(body []byte) error {
8859	var m map[string]*json.RawMessage
8860	err := json.Unmarshal(body, &m)
8861	if err != nil {
8862		return err
8863	}
8864	for k, v := range m {
8865		switch k {
8866		case "properties":
8867			if v != nil {
8868				var bastionHostPropertiesFormat BastionHostPropertiesFormat
8869				err = json.Unmarshal(*v, &bastionHostPropertiesFormat)
8870				if err != nil {
8871					return err
8872				}
8873				bh.BastionHostPropertiesFormat = &bastionHostPropertiesFormat
8874			}
8875		case "etag":
8876			if v != nil {
8877				var etag string
8878				err = json.Unmarshal(*v, &etag)
8879				if err != nil {
8880					return err
8881				}
8882				bh.Etag = &etag
8883			}
8884		case "id":
8885			if v != nil {
8886				var ID string
8887				err = json.Unmarshal(*v, &ID)
8888				if err != nil {
8889					return err
8890				}
8891				bh.ID = &ID
8892			}
8893		case "name":
8894			if v != nil {
8895				var name string
8896				err = json.Unmarshal(*v, &name)
8897				if err != nil {
8898					return err
8899				}
8900				bh.Name = &name
8901			}
8902		case "type":
8903			if v != nil {
8904				var typeVar string
8905				err = json.Unmarshal(*v, &typeVar)
8906				if err != nil {
8907					return err
8908				}
8909				bh.Type = &typeVar
8910			}
8911		case "location":
8912			if v != nil {
8913				var location string
8914				err = json.Unmarshal(*v, &location)
8915				if err != nil {
8916					return err
8917				}
8918				bh.Location = &location
8919			}
8920		case "tags":
8921			if v != nil {
8922				var tags map[string]*string
8923				err = json.Unmarshal(*v, &tags)
8924				if err != nil {
8925					return err
8926				}
8927				bh.Tags = tags
8928			}
8929		}
8930	}
8931
8932	return nil
8933}
8934
8935// BastionHostIPConfiguration IP configuration of an Bastion Host.
8936type BastionHostIPConfiguration struct {
8937	// BastionHostIPConfigurationPropertiesFormat - Represents the ip configuration associated with the resource.
8938	*BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
8939	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
8940	Name *string `json:"name,omitempty"`
8941	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
8942	Etag *string `json:"etag,omitempty"`
8943	// Type - READ-ONLY; Ip configuration type.
8944	Type *string `json:"type,omitempty"`
8945	// ID - Resource ID.
8946	ID *string `json:"id,omitempty"`
8947}
8948
8949// MarshalJSON is the custom marshaler for BastionHostIPConfiguration.
8950func (bhic BastionHostIPConfiguration) MarshalJSON() ([]byte, error) {
8951	objectMap := make(map[string]interface{})
8952	if bhic.BastionHostIPConfigurationPropertiesFormat != nil {
8953		objectMap["properties"] = bhic.BastionHostIPConfigurationPropertiesFormat
8954	}
8955	if bhic.Name != nil {
8956		objectMap["name"] = bhic.Name
8957	}
8958	if bhic.ID != nil {
8959		objectMap["id"] = bhic.ID
8960	}
8961	return json.Marshal(objectMap)
8962}
8963
8964// UnmarshalJSON is the custom unmarshaler for BastionHostIPConfiguration struct.
8965func (bhic *BastionHostIPConfiguration) UnmarshalJSON(body []byte) error {
8966	var m map[string]*json.RawMessage
8967	err := json.Unmarshal(body, &m)
8968	if err != nil {
8969		return err
8970	}
8971	for k, v := range m {
8972		switch k {
8973		case "properties":
8974			if v != nil {
8975				var bastionHostIPConfigurationPropertiesFormat BastionHostIPConfigurationPropertiesFormat
8976				err = json.Unmarshal(*v, &bastionHostIPConfigurationPropertiesFormat)
8977				if err != nil {
8978					return err
8979				}
8980				bhic.BastionHostIPConfigurationPropertiesFormat = &bastionHostIPConfigurationPropertiesFormat
8981			}
8982		case "name":
8983			if v != nil {
8984				var name string
8985				err = json.Unmarshal(*v, &name)
8986				if err != nil {
8987					return err
8988				}
8989				bhic.Name = &name
8990			}
8991		case "etag":
8992			if v != nil {
8993				var etag string
8994				err = json.Unmarshal(*v, &etag)
8995				if err != nil {
8996					return err
8997				}
8998				bhic.Etag = &etag
8999			}
9000		case "type":
9001			if v != nil {
9002				var typeVar string
9003				err = json.Unmarshal(*v, &typeVar)
9004				if err != nil {
9005					return err
9006				}
9007				bhic.Type = &typeVar
9008			}
9009		case "id":
9010			if v != nil {
9011				var ID string
9012				err = json.Unmarshal(*v, &ID)
9013				if err != nil {
9014					return err
9015				}
9016				bhic.ID = &ID
9017			}
9018		}
9019	}
9020
9021	return nil
9022}
9023
9024// BastionHostIPConfigurationPropertiesFormat properties of IP configuration of an Bastion Host.
9025type BastionHostIPConfigurationPropertiesFormat struct {
9026	// Subnet - Reference of the subnet resource.
9027	Subnet *SubResource `json:"subnet,omitempty"`
9028	// PublicIPAddress - Reference of the PublicIP resource.
9029	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
9030	// ProvisioningState - READ-ONLY; The provisioning state of the bastion host IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9031	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9032	// PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic'
9033	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
9034}
9035
9036// BastionHostListResult response for ListBastionHosts API service call.
9037type BastionHostListResult struct {
9038	autorest.Response `json:"-"`
9039	// Value - List of Bastion Hosts in a resource group.
9040	Value *[]BastionHost `json:"value,omitempty"`
9041	// NextLink - URL to get the next set of results.
9042	NextLink *string `json:"nextLink,omitempty"`
9043}
9044
9045// BastionHostListResultIterator provides access to a complete listing of BastionHost values.
9046type BastionHostListResultIterator struct {
9047	i    int
9048	page BastionHostListResultPage
9049}
9050
9051// NextWithContext advances to the next value.  If there was an error making
9052// the request the iterator does not advance and the error is returned.
9053func (iter *BastionHostListResultIterator) NextWithContext(ctx context.Context) (err error) {
9054	if tracing.IsEnabled() {
9055		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultIterator.NextWithContext")
9056		defer func() {
9057			sc := -1
9058			if iter.Response().Response.Response != nil {
9059				sc = iter.Response().Response.Response.StatusCode
9060			}
9061			tracing.EndSpan(ctx, sc, err)
9062		}()
9063	}
9064	iter.i++
9065	if iter.i < len(iter.page.Values()) {
9066		return nil
9067	}
9068	err = iter.page.NextWithContext(ctx)
9069	if err != nil {
9070		iter.i--
9071		return err
9072	}
9073	iter.i = 0
9074	return nil
9075}
9076
9077// Next advances to the next value.  If there was an error making
9078// the request the iterator does not advance and the error is returned.
9079// Deprecated: Use NextWithContext() instead.
9080func (iter *BastionHostListResultIterator) Next() error {
9081	return iter.NextWithContext(context.Background())
9082}
9083
9084// NotDone returns true if the enumeration should be started or is not yet complete.
9085func (iter BastionHostListResultIterator) NotDone() bool {
9086	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9087}
9088
9089// Response returns the raw server response from the last page request.
9090func (iter BastionHostListResultIterator) Response() BastionHostListResult {
9091	return iter.page.Response()
9092}
9093
9094// Value returns the current value or a zero-initialized value if the
9095// iterator has advanced beyond the end of the collection.
9096func (iter BastionHostListResultIterator) Value() BastionHost {
9097	if !iter.page.NotDone() {
9098		return BastionHost{}
9099	}
9100	return iter.page.Values()[iter.i]
9101}
9102
9103// Creates a new instance of the BastionHostListResultIterator type.
9104func NewBastionHostListResultIterator(page BastionHostListResultPage) BastionHostListResultIterator {
9105	return BastionHostListResultIterator{page: page}
9106}
9107
9108// IsEmpty returns true if the ListResult contains no values.
9109func (bhlr BastionHostListResult) IsEmpty() bool {
9110	return bhlr.Value == nil || len(*bhlr.Value) == 0
9111}
9112
9113// bastionHostListResultPreparer prepares a request to retrieve the next set of results.
9114// It returns nil if no more results exist.
9115func (bhlr BastionHostListResult) bastionHostListResultPreparer(ctx context.Context) (*http.Request, error) {
9116	if bhlr.NextLink == nil || len(to.String(bhlr.NextLink)) < 1 {
9117		return nil, nil
9118	}
9119	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9120		autorest.AsJSON(),
9121		autorest.AsGet(),
9122		autorest.WithBaseURL(to.String(bhlr.NextLink)))
9123}
9124
9125// BastionHostListResultPage contains a page of BastionHost values.
9126type BastionHostListResultPage struct {
9127	fn   func(context.Context, BastionHostListResult) (BastionHostListResult, error)
9128	bhlr BastionHostListResult
9129}
9130
9131// NextWithContext advances to the next page of values.  If there was an error making
9132// the request the page does not advance and the error is returned.
9133func (page *BastionHostListResultPage) NextWithContext(ctx context.Context) (err error) {
9134	if tracing.IsEnabled() {
9135		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultPage.NextWithContext")
9136		defer func() {
9137			sc := -1
9138			if page.Response().Response.Response != nil {
9139				sc = page.Response().Response.Response.StatusCode
9140			}
9141			tracing.EndSpan(ctx, sc, err)
9142		}()
9143	}
9144	next, err := page.fn(ctx, page.bhlr)
9145	if err != nil {
9146		return err
9147	}
9148	page.bhlr = next
9149	return nil
9150}
9151
9152// Next advances to the next page of values.  If there was an error making
9153// the request the page does not advance and the error is returned.
9154// Deprecated: Use NextWithContext() instead.
9155func (page *BastionHostListResultPage) Next() error {
9156	return page.NextWithContext(context.Background())
9157}
9158
9159// NotDone returns true if the page enumeration should be started or is not yet complete.
9160func (page BastionHostListResultPage) NotDone() bool {
9161	return !page.bhlr.IsEmpty()
9162}
9163
9164// Response returns the raw server response from the last page request.
9165func (page BastionHostListResultPage) Response() BastionHostListResult {
9166	return page.bhlr
9167}
9168
9169// Values returns the slice of values for the current page or nil if there are no values.
9170func (page BastionHostListResultPage) Values() []BastionHost {
9171	if page.bhlr.IsEmpty() {
9172		return nil
9173	}
9174	return *page.bhlr.Value
9175}
9176
9177// Creates a new instance of the BastionHostListResultPage type.
9178func NewBastionHostListResultPage(getNextPage func(context.Context, BastionHostListResult) (BastionHostListResult, error)) BastionHostListResultPage {
9179	return BastionHostListResultPage{fn: getNextPage}
9180}
9181
9182// BastionHostPropertiesFormat properties of the Bastion Host.
9183type BastionHostPropertiesFormat struct {
9184	// IPConfigurations - IP configuration of the Bastion Host resource.
9185	IPConfigurations *[]BastionHostIPConfiguration `json:"ipConfigurations,omitempty"`
9186	// DNSName - FQDN for the endpoint on which bastion host is accessible.
9187	DNSName *string `json:"dnsName,omitempty"`
9188	// ProvisioningState - READ-ONLY; The provisioning state of the bastion host resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9189	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9190}
9191
9192// BastionHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9193// long-running operation.
9194type BastionHostsCreateOrUpdateFuture struct {
9195	azure.Future
9196}
9197
9198// Result returns the result of the asynchronous operation.
9199// If the operation has not completed it will return an error.
9200func (future *BastionHostsCreateOrUpdateFuture) Result(client BastionHostsClient) (bh BastionHost, err error) {
9201	var done bool
9202	done, err = future.DoneWithContext(context.Background(), client)
9203	if err != nil {
9204		err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9205		return
9206	}
9207	if !done {
9208		err = azure.NewAsyncOpIncompleteError("network.BastionHostsCreateOrUpdateFuture")
9209		return
9210	}
9211	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9212	if bh.Response.Response, err = future.GetResult(sender); err == nil && bh.Response.Response.StatusCode != http.StatusNoContent {
9213		bh, err = client.CreateOrUpdateResponder(bh.Response.Response)
9214		if err != nil {
9215			err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", bh.Response.Response, "Failure responding to request")
9216		}
9217	}
9218	return
9219}
9220
9221// BastionHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
9222// operation.
9223type BastionHostsDeleteFuture struct {
9224	azure.Future
9225}
9226
9227// Result returns the result of the asynchronous operation.
9228// If the operation has not completed it will return an error.
9229func (future *BastionHostsDeleteFuture) Result(client BastionHostsClient) (ar autorest.Response, err error) {
9230	var done bool
9231	done, err = future.DoneWithContext(context.Background(), client)
9232	if err != nil {
9233		err = autorest.NewErrorWithError(err, "network.BastionHostsDeleteFuture", "Result", future.Response(), "Polling failure")
9234		return
9235	}
9236	if !done {
9237		err = azure.NewAsyncOpIncompleteError("network.BastionHostsDeleteFuture")
9238		return
9239	}
9240	ar.Response = future.Response()
9241	return
9242}
9243
9244// BastionSessionDeleteResult response for DisconnectActiveSessions.
9245type BastionSessionDeleteResult struct {
9246	autorest.Response `json:"-"`
9247	// Value - List of sessions with their corresponding state.
9248	Value *[]BastionSessionState `json:"value,omitempty"`
9249	// NextLink - The URL to get the next set of results.
9250	NextLink *string `json:"nextLink,omitempty"`
9251}
9252
9253// BastionSessionDeleteResultIterator provides access to a complete listing of BastionSessionState values.
9254type BastionSessionDeleteResultIterator struct {
9255	i    int
9256	page BastionSessionDeleteResultPage
9257}
9258
9259// NextWithContext advances to the next value.  If there was an error making
9260// the request the iterator does not advance and the error is returned.
9261func (iter *BastionSessionDeleteResultIterator) NextWithContext(ctx context.Context) (err error) {
9262	if tracing.IsEnabled() {
9263		ctx = tracing.StartSpan(ctx, fqdn+"/BastionSessionDeleteResultIterator.NextWithContext")
9264		defer func() {
9265			sc := -1
9266			if iter.Response().Response.Response != nil {
9267				sc = iter.Response().Response.Response.StatusCode
9268			}
9269			tracing.EndSpan(ctx, sc, err)
9270		}()
9271	}
9272	iter.i++
9273	if iter.i < len(iter.page.Values()) {
9274		return nil
9275	}
9276	err = iter.page.NextWithContext(ctx)
9277	if err != nil {
9278		iter.i--
9279		return err
9280	}
9281	iter.i = 0
9282	return nil
9283}
9284
9285// Next advances to the next value.  If there was an error making
9286// the request the iterator does not advance and the error is returned.
9287// Deprecated: Use NextWithContext() instead.
9288func (iter *BastionSessionDeleteResultIterator) Next() error {
9289	return iter.NextWithContext(context.Background())
9290}
9291
9292// NotDone returns true if the enumeration should be started or is not yet complete.
9293func (iter BastionSessionDeleteResultIterator) NotDone() bool {
9294	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9295}
9296
9297// Response returns the raw server response from the last page request.
9298func (iter BastionSessionDeleteResultIterator) Response() BastionSessionDeleteResult {
9299	return iter.page.Response()
9300}
9301
9302// Value returns the current value or a zero-initialized value if the
9303// iterator has advanced beyond the end of the collection.
9304func (iter BastionSessionDeleteResultIterator) Value() BastionSessionState {
9305	if !iter.page.NotDone() {
9306		return BastionSessionState{}
9307	}
9308	return iter.page.Values()[iter.i]
9309}
9310
9311// Creates a new instance of the BastionSessionDeleteResultIterator type.
9312func NewBastionSessionDeleteResultIterator(page BastionSessionDeleteResultPage) BastionSessionDeleteResultIterator {
9313	return BastionSessionDeleteResultIterator{page: page}
9314}
9315
9316// IsEmpty returns true if the ListResult contains no values.
9317func (bsdr BastionSessionDeleteResult) IsEmpty() bool {
9318	return bsdr.Value == nil || len(*bsdr.Value) == 0
9319}
9320
9321// bastionSessionDeleteResultPreparer prepares a request to retrieve the next set of results.
9322// It returns nil if no more results exist.
9323func (bsdr BastionSessionDeleteResult) bastionSessionDeleteResultPreparer(ctx context.Context) (*http.Request, error) {
9324	if bsdr.NextLink == nil || len(to.String(bsdr.NextLink)) < 1 {
9325		return nil, nil
9326	}
9327	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9328		autorest.AsJSON(),
9329		autorest.AsGet(),
9330		autorest.WithBaseURL(to.String(bsdr.NextLink)))
9331}
9332
9333// BastionSessionDeleteResultPage contains a page of BastionSessionState values.
9334type BastionSessionDeleteResultPage struct {
9335	fn   func(context.Context, BastionSessionDeleteResult) (BastionSessionDeleteResult, error)
9336	bsdr BastionSessionDeleteResult
9337}
9338
9339// NextWithContext advances to the next page of values.  If there was an error making
9340// the request the page does not advance and the error is returned.
9341func (page *BastionSessionDeleteResultPage) NextWithContext(ctx context.Context) (err error) {
9342	if tracing.IsEnabled() {
9343		ctx = tracing.StartSpan(ctx, fqdn+"/BastionSessionDeleteResultPage.NextWithContext")
9344		defer func() {
9345			sc := -1
9346			if page.Response().Response.Response != nil {
9347				sc = page.Response().Response.Response.StatusCode
9348			}
9349			tracing.EndSpan(ctx, sc, err)
9350		}()
9351	}
9352	next, err := page.fn(ctx, page.bsdr)
9353	if err != nil {
9354		return err
9355	}
9356	page.bsdr = next
9357	return nil
9358}
9359
9360// Next advances to the next page of values.  If there was an error making
9361// the request the page does not advance and the error is returned.
9362// Deprecated: Use NextWithContext() instead.
9363func (page *BastionSessionDeleteResultPage) Next() error {
9364	return page.NextWithContext(context.Background())
9365}
9366
9367// NotDone returns true if the page enumeration should be started or is not yet complete.
9368func (page BastionSessionDeleteResultPage) NotDone() bool {
9369	return !page.bsdr.IsEmpty()
9370}
9371
9372// Response returns the raw server response from the last page request.
9373func (page BastionSessionDeleteResultPage) Response() BastionSessionDeleteResult {
9374	return page.bsdr
9375}
9376
9377// Values returns the slice of values for the current page or nil if there are no values.
9378func (page BastionSessionDeleteResultPage) Values() []BastionSessionState {
9379	if page.bsdr.IsEmpty() {
9380		return nil
9381	}
9382	return *page.bsdr.Value
9383}
9384
9385// Creates a new instance of the BastionSessionDeleteResultPage type.
9386func NewBastionSessionDeleteResultPage(getNextPage func(context.Context, BastionSessionDeleteResult) (BastionSessionDeleteResult, error)) BastionSessionDeleteResultPage {
9387	return BastionSessionDeleteResultPage{fn: getNextPage}
9388}
9389
9390// BastionSessionState the session state detail for a target.
9391type BastionSessionState struct {
9392	// SessionID - READ-ONLY; A unique id for the session.
9393	SessionID *string `json:"sessionId,omitempty"`
9394	// Message - READ-ONLY; Used for extra information.
9395	Message *string `json:"message,omitempty"`
9396	// State - READ-ONLY; The state of the session. Disconnected/Failed/NotFound.
9397	State *string `json:"state,omitempty"`
9398}
9399
9400// BastionShareableLink bastion Shareable Link.
9401type BastionShareableLink struct {
9402	// VM - Reference of the virtual machine resource.
9403	VM *VM `json:"vm,omitempty"`
9404	// Bsl - READ-ONLY; The unique Bastion Shareable Link to the virtual machine.
9405	Bsl *string `json:"bsl,omitempty"`
9406	// CreatedAt - READ-ONLY; The time when the link was created.
9407	CreatedAt *string `json:"createdAt,omitempty"`
9408	// Message - READ-ONLY; Optional field indicating the warning or error message related to the vm in case of partial failure.
9409	Message *string `json:"message,omitempty"`
9410}
9411
9412// BastionShareableLinkListRequest post request for all the Bastion Shareable Link endpoints.
9413type BastionShareableLinkListRequest struct {
9414	// Vms - List of VM references.
9415	Vms *[]BastionShareableLink `json:"vms,omitempty"`
9416}
9417
9418// BastionShareableLinkListResult response for all the Bastion Shareable Link endpoints.
9419type BastionShareableLinkListResult struct {
9420	autorest.Response `json:"-"`
9421	// Value - List of Bastion Shareable Links for the request.
9422	Value *[]BastionShareableLink `json:"value,omitempty"`
9423	// NextLink - The URL to get the next set of results.
9424	NextLink *string `json:"nextLink,omitempty"`
9425}
9426
9427// BastionShareableLinkListResultIterator provides access to a complete listing of BastionShareableLink
9428// values.
9429type BastionShareableLinkListResultIterator struct {
9430	i    int
9431	page BastionShareableLinkListResultPage
9432}
9433
9434// NextWithContext advances to the next value.  If there was an error making
9435// the request the iterator does not advance and the error is returned.
9436func (iter *BastionShareableLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
9437	if tracing.IsEnabled() {
9438		ctx = tracing.StartSpan(ctx, fqdn+"/BastionShareableLinkListResultIterator.NextWithContext")
9439		defer func() {
9440			sc := -1
9441			if iter.Response().Response.Response != nil {
9442				sc = iter.Response().Response.Response.StatusCode
9443			}
9444			tracing.EndSpan(ctx, sc, err)
9445		}()
9446	}
9447	iter.i++
9448	if iter.i < len(iter.page.Values()) {
9449		return nil
9450	}
9451	err = iter.page.NextWithContext(ctx)
9452	if err != nil {
9453		iter.i--
9454		return err
9455	}
9456	iter.i = 0
9457	return nil
9458}
9459
9460// Next advances to the next value.  If there was an error making
9461// the request the iterator does not advance and the error is returned.
9462// Deprecated: Use NextWithContext() instead.
9463func (iter *BastionShareableLinkListResultIterator) Next() error {
9464	return iter.NextWithContext(context.Background())
9465}
9466
9467// NotDone returns true if the enumeration should be started or is not yet complete.
9468func (iter BastionShareableLinkListResultIterator) NotDone() bool {
9469	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9470}
9471
9472// Response returns the raw server response from the last page request.
9473func (iter BastionShareableLinkListResultIterator) Response() BastionShareableLinkListResult {
9474	return iter.page.Response()
9475}
9476
9477// Value returns the current value or a zero-initialized value if the
9478// iterator has advanced beyond the end of the collection.
9479func (iter BastionShareableLinkListResultIterator) Value() BastionShareableLink {
9480	if !iter.page.NotDone() {
9481		return BastionShareableLink{}
9482	}
9483	return iter.page.Values()[iter.i]
9484}
9485
9486// Creates a new instance of the BastionShareableLinkListResultIterator type.
9487func NewBastionShareableLinkListResultIterator(page BastionShareableLinkListResultPage) BastionShareableLinkListResultIterator {
9488	return BastionShareableLinkListResultIterator{page: page}
9489}
9490
9491// IsEmpty returns true if the ListResult contains no values.
9492func (bsllr BastionShareableLinkListResult) IsEmpty() bool {
9493	return bsllr.Value == nil || len(*bsllr.Value) == 0
9494}
9495
9496// bastionShareableLinkListResultPreparer prepares a request to retrieve the next set of results.
9497// It returns nil if no more results exist.
9498func (bsllr BastionShareableLinkListResult) bastionShareableLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
9499	if bsllr.NextLink == nil || len(to.String(bsllr.NextLink)) < 1 {
9500		return nil, nil
9501	}
9502	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9503		autorest.AsJSON(),
9504		autorest.AsGet(),
9505		autorest.WithBaseURL(to.String(bsllr.NextLink)))
9506}
9507
9508// BastionShareableLinkListResultPage contains a page of BastionShareableLink values.
9509type BastionShareableLinkListResultPage struct {
9510	fn    func(context.Context, BastionShareableLinkListResult) (BastionShareableLinkListResult, error)
9511	bsllr BastionShareableLinkListResult
9512}
9513
9514// NextWithContext advances to the next page of values.  If there was an error making
9515// the request the page does not advance and the error is returned.
9516func (page *BastionShareableLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
9517	if tracing.IsEnabled() {
9518		ctx = tracing.StartSpan(ctx, fqdn+"/BastionShareableLinkListResultPage.NextWithContext")
9519		defer func() {
9520			sc := -1
9521			if page.Response().Response.Response != nil {
9522				sc = page.Response().Response.Response.StatusCode
9523			}
9524			tracing.EndSpan(ctx, sc, err)
9525		}()
9526	}
9527	next, err := page.fn(ctx, page.bsllr)
9528	if err != nil {
9529		return err
9530	}
9531	page.bsllr = next
9532	return nil
9533}
9534
9535// Next advances to the next page of values.  If there was an error making
9536// the request the page does not advance and the error is returned.
9537// Deprecated: Use NextWithContext() instead.
9538func (page *BastionShareableLinkListResultPage) Next() error {
9539	return page.NextWithContext(context.Background())
9540}
9541
9542// NotDone returns true if the page enumeration should be started or is not yet complete.
9543func (page BastionShareableLinkListResultPage) NotDone() bool {
9544	return !page.bsllr.IsEmpty()
9545}
9546
9547// Response returns the raw server response from the last page request.
9548func (page BastionShareableLinkListResultPage) Response() BastionShareableLinkListResult {
9549	return page.bsllr
9550}
9551
9552// Values returns the slice of values for the current page or nil if there are no values.
9553func (page BastionShareableLinkListResultPage) Values() []BastionShareableLink {
9554	if page.bsllr.IsEmpty() {
9555		return nil
9556	}
9557	return *page.bsllr.Value
9558}
9559
9560// Creates a new instance of the BastionShareableLinkListResultPage type.
9561func NewBastionShareableLinkListResultPage(getNextPage func(context.Context, BastionShareableLinkListResult) (BastionShareableLinkListResult, error)) BastionShareableLinkListResultPage {
9562	return BastionShareableLinkListResultPage{fn: getNextPage}
9563}
9564
9565// BGPCommunity contains bgp community information offered in Service Community resources.
9566type BGPCommunity struct {
9567	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
9568	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
9569	// CommunityName - The name of the bgp community. e.g. Skype.
9570	CommunityName *string `json:"communityName,omitempty"`
9571	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
9572	CommunityValue *string `json:"communityValue,omitempty"`
9573	// CommunityPrefixes - The prefixes that the bgp community contains.
9574	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
9575	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
9576	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
9577	// ServiceGroup - The service group of the bgp community contains.
9578	ServiceGroup *string `json:"serviceGroup,omitempty"`
9579}
9580
9581// BgpConnection virtual Appliance Site resource.
9582type BgpConnection struct {
9583	autorest.Response `json:"-"`
9584	// BgpConnectionProperties - The properties of the Bgp connections.
9585	*BgpConnectionProperties `json:"properties,omitempty"`
9586	// Name - Name of the connection.
9587	Name *string `json:"name,omitempty"`
9588	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9589	Etag *string `json:"etag,omitempty"`
9590	// Type - READ-ONLY; Connection type.
9591	Type *string `json:"type,omitempty"`
9592	// ID - Resource ID.
9593	ID *string `json:"id,omitempty"`
9594}
9595
9596// MarshalJSON is the custom marshaler for BgpConnection.
9597func (bc BgpConnection) MarshalJSON() ([]byte, error) {
9598	objectMap := make(map[string]interface{})
9599	if bc.BgpConnectionProperties != nil {
9600		objectMap["properties"] = bc.BgpConnectionProperties
9601	}
9602	if bc.Name != nil {
9603		objectMap["name"] = bc.Name
9604	}
9605	if bc.ID != nil {
9606		objectMap["id"] = bc.ID
9607	}
9608	return json.Marshal(objectMap)
9609}
9610
9611// UnmarshalJSON is the custom unmarshaler for BgpConnection struct.
9612func (bc *BgpConnection) UnmarshalJSON(body []byte) error {
9613	var m map[string]*json.RawMessage
9614	err := json.Unmarshal(body, &m)
9615	if err != nil {
9616		return err
9617	}
9618	for k, v := range m {
9619		switch k {
9620		case "properties":
9621			if v != nil {
9622				var bgpConnectionProperties BgpConnectionProperties
9623				err = json.Unmarshal(*v, &bgpConnectionProperties)
9624				if err != nil {
9625					return err
9626				}
9627				bc.BgpConnectionProperties = &bgpConnectionProperties
9628			}
9629		case "name":
9630			if v != nil {
9631				var name string
9632				err = json.Unmarshal(*v, &name)
9633				if err != nil {
9634					return err
9635				}
9636				bc.Name = &name
9637			}
9638		case "etag":
9639			if v != nil {
9640				var etag string
9641				err = json.Unmarshal(*v, &etag)
9642				if err != nil {
9643					return err
9644				}
9645				bc.Etag = &etag
9646			}
9647		case "type":
9648			if v != nil {
9649				var typeVar string
9650				err = json.Unmarshal(*v, &typeVar)
9651				if err != nil {
9652					return err
9653				}
9654				bc.Type = &typeVar
9655			}
9656		case "id":
9657			if v != nil {
9658				var ID string
9659				err = json.Unmarshal(*v, &ID)
9660				if err != nil {
9661					return err
9662				}
9663				bc.ID = &ID
9664			}
9665		}
9666	}
9667
9668	return nil
9669}
9670
9671// BgpConnectionProperties properties of the bgp connection.
9672type BgpConnectionProperties struct {
9673	// PeerAsn - Peer ASN.
9674	PeerAsn *int64 `json:"peerAsn,omitempty"`
9675	// PeerIP - Peer IP.
9676	PeerIP *string `json:"peerIp,omitempty"`
9677	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9678	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9679	// ConnectionState - READ-ONLY; The current state of the VirtualHub to Peer. Possible values include: 'HubBgpConnectionStatusUnknown', 'HubBgpConnectionStatusConnecting', 'HubBgpConnectionStatusConnected', 'HubBgpConnectionStatusNotConnected'
9680	ConnectionState HubBgpConnectionStatus `json:"connectionState,omitempty"`
9681}
9682
9683// BgpPeerStatus BGP peer status details.
9684type BgpPeerStatus struct {
9685	// LocalAddress - READ-ONLY; The virtual network gateway's local address.
9686	LocalAddress *string `json:"localAddress,omitempty"`
9687	// Neighbor - READ-ONLY; The remote BGP peer.
9688	Neighbor *string `json:"neighbor,omitempty"`
9689	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer.
9690	Asn *int64 `json:"asn,omitempty"`
9691	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
9692	State BgpPeerState `json:"state,omitempty"`
9693	// ConnectedDuration - READ-ONLY; For how long the peering has been up.
9694	ConnectedDuration *string `json:"connectedDuration,omitempty"`
9695	// RoutesReceived - READ-ONLY; The number of routes learned from this peer.
9696	RoutesReceived *int64 `json:"routesReceived,omitempty"`
9697	// MessagesSent - READ-ONLY; The number of BGP messages sent.
9698	MessagesSent *int64 `json:"messagesSent,omitempty"`
9699	// MessagesReceived - READ-ONLY; The number of BGP messages received.
9700	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
9701}
9702
9703// BgpPeerStatusListResult response for list BGP peer status API service call.
9704type BgpPeerStatusListResult struct {
9705	autorest.Response `json:"-"`
9706	// Value - List of BGP peers.
9707	Value *[]BgpPeerStatus `json:"value,omitempty"`
9708}
9709
9710// BgpServiceCommunity service Community Properties.
9711type BgpServiceCommunity struct {
9712	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
9713	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
9714	// ID - Resource ID.
9715	ID *string `json:"id,omitempty"`
9716	// Name - READ-ONLY; Resource name.
9717	Name *string `json:"name,omitempty"`
9718	// Type - READ-ONLY; Resource type.
9719	Type *string `json:"type,omitempty"`
9720	// Location - Resource location.
9721	Location *string `json:"location,omitempty"`
9722	// Tags - Resource tags.
9723	Tags map[string]*string `json:"tags"`
9724}
9725
9726// MarshalJSON is the custom marshaler for BgpServiceCommunity.
9727func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
9728	objectMap := make(map[string]interface{})
9729	if bsc.BgpServiceCommunityPropertiesFormat != nil {
9730		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
9731	}
9732	if bsc.ID != nil {
9733		objectMap["id"] = bsc.ID
9734	}
9735	if bsc.Location != nil {
9736		objectMap["location"] = bsc.Location
9737	}
9738	if bsc.Tags != nil {
9739		objectMap["tags"] = bsc.Tags
9740	}
9741	return json.Marshal(objectMap)
9742}
9743
9744// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
9745func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
9746	var m map[string]*json.RawMessage
9747	err := json.Unmarshal(body, &m)
9748	if err != nil {
9749		return err
9750	}
9751	for k, v := range m {
9752		switch k {
9753		case "properties":
9754			if v != nil {
9755				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
9756				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
9757				if err != nil {
9758					return err
9759				}
9760				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
9761			}
9762		case "id":
9763			if v != nil {
9764				var ID string
9765				err = json.Unmarshal(*v, &ID)
9766				if err != nil {
9767					return err
9768				}
9769				bsc.ID = &ID
9770			}
9771		case "name":
9772			if v != nil {
9773				var name string
9774				err = json.Unmarshal(*v, &name)
9775				if err != nil {
9776					return err
9777				}
9778				bsc.Name = &name
9779			}
9780		case "type":
9781			if v != nil {
9782				var typeVar string
9783				err = json.Unmarshal(*v, &typeVar)
9784				if err != nil {
9785					return err
9786				}
9787				bsc.Type = &typeVar
9788			}
9789		case "location":
9790			if v != nil {
9791				var location string
9792				err = json.Unmarshal(*v, &location)
9793				if err != nil {
9794					return err
9795				}
9796				bsc.Location = &location
9797			}
9798		case "tags":
9799			if v != nil {
9800				var tags map[string]*string
9801				err = json.Unmarshal(*v, &tags)
9802				if err != nil {
9803					return err
9804				}
9805				bsc.Tags = tags
9806			}
9807		}
9808	}
9809
9810	return nil
9811}
9812
9813// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
9814type BgpServiceCommunityListResult struct {
9815	autorest.Response `json:"-"`
9816	// Value - A list of service community resources.
9817	Value *[]BgpServiceCommunity `json:"value,omitempty"`
9818	// NextLink - The URL to get the next set of results.
9819	NextLink *string `json:"nextLink,omitempty"`
9820}
9821
9822// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
9823// values.
9824type BgpServiceCommunityListResultIterator struct {
9825	i    int
9826	page BgpServiceCommunityListResultPage
9827}
9828
9829// NextWithContext advances to the next value.  If there was an error making
9830// the request the iterator does not advance and the error is returned.
9831func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
9832	if tracing.IsEnabled() {
9833		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
9834		defer func() {
9835			sc := -1
9836			if iter.Response().Response.Response != nil {
9837				sc = iter.Response().Response.Response.StatusCode
9838			}
9839			tracing.EndSpan(ctx, sc, err)
9840		}()
9841	}
9842	iter.i++
9843	if iter.i < len(iter.page.Values()) {
9844		return nil
9845	}
9846	err = iter.page.NextWithContext(ctx)
9847	if err != nil {
9848		iter.i--
9849		return err
9850	}
9851	iter.i = 0
9852	return nil
9853}
9854
9855// Next advances to the next value.  If there was an error making
9856// the request the iterator does not advance and the error is returned.
9857// Deprecated: Use NextWithContext() instead.
9858func (iter *BgpServiceCommunityListResultIterator) Next() error {
9859	return iter.NextWithContext(context.Background())
9860}
9861
9862// NotDone returns true if the enumeration should be started or is not yet complete.
9863func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
9864	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9865}
9866
9867// Response returns the raw server response from the last page request.
9868func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
9869	return iter.page.Response()
9870}
9871
9872// Value returns the current value or a zero-initialized value if the
9873// iterator has advanced beyond the end of the collection.
9874func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
9875	if !iter.page.NotDone() {
9876		return BgpServiceCommunity{}
9877	}
9878	return iter.page.Values()[iter.i]
9879}
9880
9881// Creates a new instance of the BgpServiceCommunityListResultIterator type.
9882func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
9883	return BgpServiceCommunityListResultIterator{page: page}
9884}
9885
9886// IsEmpty returns true if the ListResult contains no values.
9887func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
9888	return bsclr.Value == nil || len(*bsclr.Value) == 0
9889}
9890
9891// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
9892// It returns nil if no more results exist.
9893func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
9894	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
9895		return nil, nil
9896	}
9897	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9898		autorest.AsJSON(),
9899		autorest.AsGet(),
9900		autorest.WithBaseURL(to.String(bsclr.NextLink)))
9901}
9902
9903// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
9904type BgpServiceCommunityListResultPage struct {
9905	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
9906	bsclr BgpServiceCommunityListResult
9907}
9908
9909// NextWithContext advances to the next page of values.  If there was an error making
9910// the request the page does not advance and the error is returned.
9911func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
9912	if tracing.IsEnabled() {
9913		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
9914		defer func() {
9915			sc := -1
9916			if page.Response().Response.Response != nil {
9917				sc = page.Response().Response.Response.StatusCode
9918			}
9919			tracing.EndSpan(ctx, sc, err)
9920		}()
9921	}
9922	next, err := page.fn(ctx, page.bsclr)
9923	if err != nil {
9924		return err
9925	}
9926	page.bsclr = next
9927	return nil
9928}
9929
9930// Next advances to the next page of values.  If there was an error making
9931// the request the page does not advance and the error is returned.
9932// Deprecated: Use NextWithContext() instead.
9933func (page *BgpServiceCommunityListResultPage) Next() error {
9934	return page.NextWithContext(context.Background())
9935}
9936
9937// NotDone returns true if the page enumeration should be started or is not yet complete.
9938func (page BgpServiceCommunityListResultPage) NotDone() bool {
9939	return !page.bsclr.IsEmpty()
9940}
9941
9942// Response returns the raw server response from the last page request.
9943func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
9944	return page.bsclr
9945}
9946
9947// Values returns the slice of values for the current page or nil if there are no values.
9948func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
9949	if page.bsclr.IsEmpty() {
9950		return nil
9951	}
9952	return *page.bsclr.Value
9953}
9954
9955// Creates a new instance of the BgpServiceCommunityListResultPage type.
9956func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
9957	return BgpServiceCommunityListResultPage{fn: getNextPage}
9958}
9959
9960// BgpServiceCommunityPropertiesFormat properties of Service Community.
9961type BgpServiceCommunityPropertiesFormat struct {
9962	// ServiceName - The name of the bgp community. e.g. Skype.
9963	ServiceName *string `json:"serviceName,omitempty"`
9964	// BgpCommunities - A list of bgp communities.
9965	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
9966}
9967
9968// BgpSettings BGP settings details.
9969type BgpSettings struct {
9970	// Asn - The BGP speaker's ASN.
9971	Asn *int64 `json:"asn,omitempty"`
9972	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
9973	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
9974	// PeerWeight - The weight added to routes learned from this BGP speaker.
9975	PeerWeight *int32 `json:"peerWeight,omitempty"`
9976	// BgpPeeringAddresses - BGP peering address with IP configuration ID for virtual network gateway.
9977	BgpPeeringAddresses *[]IPConfigurationBgpPeeringAddress `json:"bgpPeeringAddresses,omitempty"`
9978}
9979
9980// BreakOutCategoryPolicies network Virtual Appliance Sku Properties.
9981type BreakOutCategoryPolicies struct {
9982	// Allow - Flag to control breakout of o365 allow category.
9983	Allow *bool `json:"allow,omitempty"`
9984	// Optimize - Flag to control breakout of o365 optimize category.
9985	Optimize *bool `json:"optimize,omitempty"`
9986	// Default - Flag to control breakout of o365 default category.
9987	Default *bool `json:"default,omitempty"`
9988}
9989
9990// CheckPrivateLinkServiceVisibilityRequest request body of the CheckPrivateLinkServiceVisibility API
9991// service call.
9992type CheckPrivateLinkServiceVisibilityRequest struct {
9993	// PrivateLinkServiceAlias - The alias of the private link service.
9994	PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"`
9995}
9996
9997// CloudError an error response from the service.
9998type CloudError struct {
9999	// Error - Cloud error body.
10000	Error *CloudErrorBody `json:"error,omitempty"`
10001}
10002
10003// CloudErrorBody an error response from the service.
10004type CloudErrorBody struct {
10005	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
10006	Code *string `json:"code,omitempty"`
10007	// Message - A message describing the error, intended to be suitable for display in a user interface.
10008	Message *string `json:"message,omitempty"`
10009	// Target - The target of the particular error. For example, the name of the property in error.
10010	Target *string `json:"target,omitempty"`
10011	// Details - A list of additional details about the error.
10012	Details *[]CloudErrorBody `json:"details,omitempty"`
10013}
10014
10015// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
10016type ConfigurationDiagnosticParameters struct {
10017	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
10018	TargetResourceID *string `json:"targetResourceId,omitempty"`
10019	// VerbosityLevel - Verbosity level. Possible values include: 'Normal', 'Minimum', 'Full'
10020	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
10021	// Profiles - List of network configuration diagnostic profiles.
10022	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
10023}
10024
10025// ConfigurationDiagnosticProfile parameters to compare with network configuration.
10026type ConfigurationDiagnosticProfile struct {
10027	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
10028	Direction Direction `json:"direction,omitempty"`
10029	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
10030	Protocol *string `json:"protocol,omitempty"`
10031	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
10032	Source *string `json:"source,omitempty"`
10033	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
10034	Destination *string `json:"destination,omitempty"`
10035	// DestinationPort - Traffic destination port. Accepted values are '*' and a single port in the range (0 - 65535).
10036	DestinationPort *string `json:"destinationPort,omitempty"`
10037}
10038
10039// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
10040type ConfigurationDiagnosticResponse struct {
10041	autorest.Response `json:"-"`
10042	// Results - READ-ONLY; List of network configuration diagnostic results.
10043	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
10044}
10045
10046// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
10047// query.
10048type ConfigurationDiagnosticResult struct {
10049	// Profile - Network configuration diagnostic profile.
10050	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
10051	// NetworkSecurityGroupResult - Network security group result.
10052	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
10053}
10054
10055// ConnectionMonitor parameters that define the operation to create a connection monitor.
10056type ConnectionMonitor struct {
10057	// Location - Connection monitor location.
10058	Location *string `json:"location,omitempty"`
10059	// Tags - Connection monitor tags.
10060	Tags map[string]*string `json:"tags"`
10061	// ConnectionMonitorParameters - Properties of the connection monitor.
10062	*ConnectionMonitorParameters `json:"properties,omitempty"`
10063}
10064
10065// MarshalJSON is the custom marshaler for ConnectionMonitor.
10066func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
10067	objectMap := make(map[string]interface{})
10068	if cm.Location != nil {
10069		objectMap["location"] = cm.Location
10070	}
10071	if cm.Tags != nil {
10072		objectMap["tags"] = cm.Tags
10073	}
10074	if cm.ConnectionMonitorParameters != nil {
10075		objectMap["properties"] = cm.ConnectionMonitorParameters
10076	}
10077	return json.Marshal(objectMap)
10078}
10079
10080// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
10081func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
10082	var m map[string]*json.RawMessage
10083	err := json.Unmarshal(body, &m)
10084	if err != nil {
10085		return err
10086	}
10087	for k, v := range m {
10088		switch k {
10089		case "location":
10090			if v != nil {
10091				var location string
10092				err = json.Unmarshal(*v, &location)
10093				if err != nil {
10094					return err
10095				}
10096				cm.Location = &location
10097			}
10098		case "tags":
10099			if v != nil {
10100				var tags map[string]*string
10101				err = json.Unmarshal(*v, &tags)
10102				if err != nil {
10103					return err
10104				}
10105				cm.Tags = tags
10106			}
10107		case "properties":
10108			if v != nil {
10109				var connectionMonitorParameters ConnectionMonitorParameters
10110				err = json.Unmarshal(*v, &connectionMonitorParameters)
10111				if err != nil {
10112					return err
10113				}
10114				cm.ConnectionMonitorParameters = &connectionMonitorParameters
10115			}
10116		}
10117	}
10118
10119	return nil
10120}
10121
10122// ConnectionMonitorDestination describes the destination of connection monitor.
10123type ConnectionMonitorDestination struct {
10124	// ResourceID - The ID of the resource used as the destination by connection monitor.
10125	ResourceID *string `json:"resourceId,omitempty"`
10126	// Address - Address of the connection monitor destination (IP or domain name).
10127	Address *string `json:"address,omitempty"`
10128	// Port - The destination port used by connection monitor.
10129	Port *int32 `json:"port,omitempty"`
10130}
10131
10132// ConnectionMonitorEndpoint describes the connection monitor endpoint.
10133type ConnectionMonitorEndpoint struct {
10134	// Name - The name of the connection monitor endpoint.
10135	Name *string `json:"name,omitempty"`
10136	// ResourceID - Resource ID of the connection monitor endpoint.
10137	ResourceID *string `json:"resourceId,omitempty"`
10138	// Address - Address of the connection monitor endpoint (IP or domain name).
10139	Address *string `json:"address,omitempty"`
10140	// Filter - Filter for sub-items within the endpoint.
10141	Filter *ConnectionMonitorEndpointFilter `json:"filter,omitempty"`
10142}
10143
10144// ConnectionMonitorEndpointFilter describes the connection monitor endpoint filter.
10145type ConnectionMonitorEndpointFilter struct {
10146	// Type - The behavior of the endpoint filter. Currently only 'Include' is supported. Possible values include: 'Include'
10147	Type ConnectionMonitorEndpointFilterType `json:"type,omitempty"`
10148	// Items - List of items in the filter.
10149	Items *[]ConnectionMonitorEndpointFilterItem `json:"items,omitempty"`
10150}
10151
10152// ConnectionMonitorEndpointFilterItem describes the connection monitor endpoint filter item.
10153type ConnectionMonitorEndpointFilterItem struct {
10154	// Type - The type of item included in the filter. Currently only 'AgentAddress' is supported. Possible values include: 'AgentAddress'
10155	Type ConnectionMonitorEndpointFilterItemType `json:"type,omitempty"`
10156	// Address - The address of the filter item.
10157	Address *string `json:"address,omitempty"`
10158}
10159
10160// ConnectionMonitorHTTPConfiguration describes the HTTP configuration.
10161type ConnectionMonitorHTTPConfiguration struct {
10162	// Port - The port to connect to.
10163	Port *int32 `json:"port,omitempty"`
10164	// Method - The HTTP method to use. Possible values include: 'Get', 'Post'
10165	Method HTTPConfigurationMethod `json:"method,omitempty"`
10166	// Path - The path component of the URI. For instance, "/dir1/dir2".
10167	Path *string `json:"path,omitempty"`
10168	// RequestHeaders - The HTTP headers to transmit with the request.
10169	RequestHeaders *[]HTTPHeader `json:"requestHeaders,omitempty"`
10170	// ValidStatusCodeRanges - HTTP status codes to consider successful. For instance, "2xx,301-304,418".
10171	ValidStatusCodeRanges *[]string `json:"validStatusCodeRanges,omitempty"`
10172	// PreferHTTPS - Value indicating whether HTTPS is preferred over HTTP in cases where the choice is not explicit.
10173	PreferHTTPS *bool `json:"preferHTTPS,omitempty"`
10174}
10175
10176// ConnectionMonitorIcmpConfiguration describes the ICMP configuration.
10177type ConnectionMonitorIcmpConfiguration struct {
10178	// DisableTraceRoute - Value indicating whether path evaluation with trace route should be disabled.
10179	DisableTraceRoute *bool `json:"disableTraceRoute,omitempty"`
10180}
10181
10182// ConnectionMonitorListResult list of connection monitors.
10183type ConnectionMonitorListResult struct {
10184	autorest.Response `json:"-"`
10185	// Value - Information about connection monitors.
10186	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
10187}
10188
10189// ConnectionMonitorOutput describes a connection monitor output destination.
10190type ConnectionMonitorOutput struct {
10191	// Type - Connection monitor output destination type. Currently, only "Workspace" is supported. Possible values include: 'Workspace'
10192	Type OutputType `json:"type,omitempty"`
10193	// WorkspaceSettings - Describes the settings for producing output into a log analytics workspace.
10194	WorkspaceSettings *ConnectionMonitorWorkspaceSettings `json:"workspaceSettings,omitempty"`
10195}
10196
10197// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
10198type ConnectionMonitorParameters struct {
10199	// Source - Describes the source of connection monitor.
10200	Source *ConnectionMonitorSource `json:"source,omitempty"`
10201	// Destination - Describes the destination of connection monitor.
10202	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
10203	// AutoStart - Determines if the connection monitor will start automatically once created.
10204	AutoStart *bool `json:"autoStart,omitempty"`
10205	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
10206	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
10207	// Endpoints - List of connection monitor endpoints.
10208	Endpoints *[]ConnectionMonitorEndpoint `json:"endpoints,omitempty"`
10209	// TestConfigurations - List of connection monitor test configurations.
10210	TestConfigurations *[]ConnectionMonitorTestConfiguration `json:"testConfigurations,omitempty"`
10211	// TestGroups - List of connection monitor test groups.
10212	TestGroups *[]ConnectionMonitorTestGroup `json:"testGroups,omitempty"`
10213	// Outputs - List of connection monitor outputs.
10214	Outputs *[]ConnectionMonitorOutput `json:"outputs,omitempty"`
10215	// Notes - Optional notes to be associated with the connection monitor.
10216	Notes *string `json:"notes,omitempty"`
10217}
10218
10219// ConnectionMonitorQueryResult list of connection states snapshots.
10220type ConnectionMonitorQueryResult struct {
10221	autorest.Response `json:"-"`
10222	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
10223	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
10224	// States - Information about connection states.
10225	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
10226}
10227
10228// ConnectionMonitorResult information about the connection monitor.
10229type ConnectionMonitorResult struct {
10230	autorest.Response `json:"-"`
10231	// Name - READ-ONLY; Name of the connection monitor.
10232	Name *string `json:"name,omitempty"`
10233	// ID - READ-ONLY; ID of the connection monitor.
10234	ID *string `json:"id,omitempty"`
10235	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10236	Etag *string `json:"etag,omitempty"`
10237	// Type - READ-ONLY; Connection monitor type.
10238	Type *string `json:"type,omitempty"`
10239	// Location - Connection monitor location.
10240	Location *string `json:"location,omitempty"`
10241	// Tags - Connection monitor tags.
10242	Tags map[string]*string `json:"tags"`
10243	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
10244	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
10245}
10246
10247// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
10248func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
10249	objectMap := make(map[string]interface{})
10250	if cmr.Location != nil {
10251		objectMap["location"] = cmr.Location
10252	}
10253	if cmr.Tags != nil {
10254		objectMap["tags"] = cmr.Tags
10255	}
10256	if cmr.ConnectionMonitorResultProperties != nil {
10257		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
10258	}
10259	return json.Marshal(objectMap)
10260}
10261
10262// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
10263func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
10264	var m map[string]*json.RawMessage
10265	err := json.Unmarshal(body, &m)
10266	if err != nil {
10267		return err
10268	}
10269	for k, v := range m {
10270		switch k {
10271		case "name":
10272			if v != nil {
10273				var name string
10274				err = json.Unmarshal(*v, &name)
10275				if err != nil {
10276					return err
10277				}
10278				cmr.Name = &name
10279			}
10280		case "id":
10281			if v != nil {
10282				var ID string
10283				err = json.Unmarshal(*v, &ID)
10284				if err != nil {
10285					return err
10286				}
10287				cmr.ID = &ID
10288			}
10289		case "etag":
10290			if v != nil {
10291				var etag string
10292				err = json.Unmarshal(*v, &etag)
10293				if err != nil {
10294					return err
10295				}
10296				cmr.Etag = &etag
10297			}
10298		case "type":
10299			if v != nil {
10300				var typeVar string
10301				err = json.Unmarshal(*v, &typeVar)
10302				if err != nil {
10303					return err
10304				}
10305				cmr.Type = &typeVar
10306			}
10307		case "location":
10308			if v != nil {
10309				var location string
10310				err = json.Unmarshal(*v, &location)
10311				if err != nil {
10312					return err
10313				}
10314				cmr.Location = &location
10315			}
10316		case "tags":
10317			if v != nil {
10318				var tags map[string]*string
10319				err = json.Unmarshal(*v, &tags)
10320				if err != nil {
10321					return err
10322				}
10323				cmr.Tags = tags
10324			}
10325		case "properties":
10326			if v != nil {
10327				var connectionMonitorResultProperties ConnectionMonitorResultProperties
10328				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
10329				if err != nil {
10330					return err
10331				}
10332				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
10333			}
10334		}
10335	}
10336
10337	return nil
10338}
10339
10340// ConnectionMonitorResultProperties describes the properties of a connection monitor.
10341type ConnectionMonitorResultProperties struct {
10342	// ProvisioningState - READ-ONLY; The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10343	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10344	// StartTime - READ-ONLY; The date and time when the connection monitor was started.
10345	StartTime *date.Time `json:"startTime,omitempty"`
10346	// MonitoringStatus - READ-ONLY; The monitoring status of the connection monitor.
10347	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
10348	// ConnectionMonitorType - READ-ONLY; Type of connection monitor. Possible values include: 'MultiEndpoint', 'SingleSourceDestination'
10349	ConnectionMonitorType ConnectionMonitorType `json:"connectionMonitorType,omitempty"`
10350	// Source - Describes the source of connection monitor.
10351	Source *ConnectionMonitorSource `json:"source,omitempty"`
10352	// Destination - Describes the destination of connection monitor.
10353	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
10354	// AutoStart - Determines if the connection monitor will start automatically once created.
10355	AutoStart *bool `json:"autoStart,omitempty"`
10356	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
10357	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
10358	// Endpoints - List of connection monitor endpoints.
10359	Endpoints *[]ConnectionMonitorEndpoint `json:"endpoints,omitempty"`
10360	// TestConfigurations - List of connection monitor test configurations.
10361	TestConfigurations *[]ConnectionMonitorTestConfiguration `json:"testConfigurations,omitempty"`
10362	// TestGroups - List of connection monitor test groups.
10363	TestGroups *[]ConnectionMonitorTestGroup `json:"testGroups,omitempty"`
10364	// Outputs - List of connection monitor outputs.
10365	Outputs *[]ConnectionMonitorOutput `json:"outputs,omitempty"`
10366	// Notes - Optional notes to be associated with the connection monitor.
10367	Notes *string `json:"notes,omitempty"`
10368}
10369
10370// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10371// long-running operation.
10372type ConnectionMonitorsCreateOrUpdateFuture struct {
10373	azure.Future
10374}
10375
10376// Result returns the result of the asynchronous operation.
10377// If the operation has not completed it will return an error.
10378func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
10379	var done bool
10380	done, err = future.DoneWithContext(context.Background(), client)
10381	if err != nil {
10382		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10383		return
10384	}
10385	if !done {
10386		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
10387		return
10388	}
10389	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10390	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
10391		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
10392		if err != nil {
10393			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
10394		}
10395	}
10396	return
10397}
10398
10399// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
10400// long-running operation.
10401type ConnectionMonitorsDeleteFuture struct {
10402	azure.Future
10403}
10404
10405// Result returns the result of the asynchronous operation.
10406// If the operation has not completed it will return an error.
10407func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
10408	var done bool
10409	done, err = future.DoneWithContext(context.Background(), client)
10410	if err != nil {
10411		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
10412		return
10413	}
10414	if !done {
10415		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
10416		return
10417	}
10418	ar.Response = future.Response()
10419	return
10420}
10421
10422// ConnectionMonitorSource describes the source of connection monitor.
10423type ConnectionMonitorSource struct {
10424	// ResourceID - The ID of the resource used as the source by connection monitor.
10425	ResourceID *string `json:"resourceId,omitempty"`
10426	// Port - The source port used by connection monitor.
10427	Port *int32 `json:"port,omitempty"`
10428}
10429
10430// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
10431// operation.
10432type ConnectionMonitorsQueryFuture struct {
10433	azure.Future
10434}
10435
10436// Result returns the result of the asynchronous operation.
10437// If the operation has not completed it will return an error.
10438func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
10439	var done bool
10440	done, err = future.DoneWithContext(context.Background(), client)
10441	if err != nil {
10442		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
10443		return
10444	}
10445	if !done {
10446		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
10447		return
10448	}
10449	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10450	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
10451		cmqr, err = client.QueryResponder(cmqr.Response.Response)
10452		if err != nil {
10453			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
10454		}
10455	}
10456	return
10457}
10458
10459// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
10460// operation.
10461type ConnectionMonitorsStartFuture struct {
10462	azure.Future
10463}
10464
10465// Result returns the result of the asynchronous operation.
10466// If the operation has not completed it will return an error.
10467func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
10468	var done bool
10469	done, err = future.DoneWithContext(context.Background(), client)
10470	if err != nil {
10471		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
10472		return
10473	}
10474	if !done {
10475		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
10476		return
10477	}
10478	ar.Response = future.Response()
10479	return
10480}
10481
10482// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
10483// operation.
10484type ConnectionMonitorsStopFuture struct {
10485	azure.Future
10486}
10487
10488// Result returns the result of the asynchronous operation.
10489// If the operation has not completed it will return an error.
10490func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
10491	var done bool
10492	done, err = future.DoneWithContext(context.Background(), client)
10493	if err != nil {
10494		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
10495		return
10496	}
10497	if !done {
10498		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
10499		return
10500	}
10501	ar.Response = future.Response()
10502	return
10503}
10504
10505// ConnectionMonitorSuccessThreshold describes the threshold for declaring a test successful.
10506type ConnectionMonitorSuccessThreshold struct {
10507	// ChecksFailedPercent - The maximum percentage of failed checks permitted for a test to evaluate as successful.
10508	ChecksFailedPercent *int32 `json:"checksFailedPercent,omitempty"`
10509	// RoundTripTimeMs - The maximum round-trip time in milliseconds permitted for a test to evaluate as successful.
10510	RoundTripTimeMs *float64 `json:"roundTripTimeMs,omitempty"`
10511}
10512
10513// ConnectionMonitorTCPConfiguration describes the TCP configuration.
10514type ConnectionMonitorTCPConfiguration struct {
10515	// Port - The port to connect to.
10516	Port *int32 `json:"port,omitempty"`
10517	// DisableTraceRoute - Value indicating whether path evaluation with trace route should be disabled.
10518	DisableTraceRoute *bool `json:"disableTraceRoute,omitempty"`
10519}
10520
10521// ConnectionMonitorTestConfiguration describes a connection monitor test configuration.
10522type ConnectionMonitorTestConfiguration struct {
10523	// Name - The name of the connection monitor test configuration.
10524	Name *string `json:"name,omitempty"`
10525	// TestFrequencySec - The frequency of test evaluation, in seconds.
10526	TestFrequencySec *int32 `json:"testFrequencySec,omitempty"`
10527	// Protocol - The protocol to use in test evaluation. Possible values include: 'ConnectionMonitorTestConfigurationProtocolTCP', 'ConnectionMonitorTestConfigurationProtocolHTTP', 'ConnectionMonitorTestConfigurationProtocolIcmp'
10528	Protocol ConnectionMonitorTestConfigurationProtocol `json:"protocol,omitempty"`
10529	// PreferredIPVersion - The preferred IP version to use in test evaluation. The connection monitor may choose to use a different version depending on other parameters. Possible values include: 'PreferredIPVersionIPv4', 'PreferredIPVersionIPv6'
10530	PreferredIPVersion PreferredIPVersion `json:"preferredIPVersion,omitempty"`
10531	// HTTPConfiguration - The parameters used to perform test evaluation over HTTP.
10532	HTTPConfiguration *ConnectionMonitorHTTPConfiguration `json:"httpConfiguration,omitempty"`
10533	// TCPConfiguration - The parameters used to perform test evaluation over TCP.
10534	TCPConfiguration *ConnectionMonitorTCPConfiguration `json:"tcpConfiguration,omitempty"`
10535	// IcmpConfiguration - The parameters used to perform test evaluation over ICMP.
10536	IcmpConfiguration *ConnectionMonitorIcmpConfiguration `json:"icmpConfiguration,omitempty"`
10537	// SuccessThreshold - The threshold for declaring a test successful.
10538	SuccessThreshold *ConnectionMonitorSuccessThreshold `json:"successThreshold,omitempty"`
10539}
10540
10541// ConnectionMonitorTestGroup describes the connection monitor test group.
10542type ConnectionMonitorTestGroup struct {
10543	// Name - The name of the connection monitor test group.
10544	Name *string `json:"name,omitempty"`
10545	// Disable - Value indicating whether test group is disabled.
10546	Disable *bool `json:"disable,omitempty"`
10547	// TestConfigurations - List of test configuration names.
10548	TestConfigurations *[]string `json:"testConfigurations,omitempty"`
10549	// Sources - List of source endpoint names.
10550	Sources *[]string `json:"sources,omitempty"`
10551	// Destinations - List of destination endpoint names.
10552	Destinations *[]string `json:"destinations,omitempty"`
10553}
10554
10555// ConnectionMonitorWorkspaceSettings describes the settings for producing output into a log analytics
10556// workspace.
10557type ConnectionMonitorWorkspaceSettings struct {
10558	// WorkspaceResourceID - Log analytics workspace resource ID.
10559	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
10560}
10561
10562// ConnectionResetSharedKey the virtual network connection reset shared key.
10563type ConnectionResetSharedKey struct {
10564	autorest.Response `json:"-"`
10565	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
10566	KeyLength *int32 `json:"keyLength,omitempty"`
10567}
10568
10569// ConnectionSharedKey response for GetConnectionSharedKey API service call.
10570type ConnectionSharedKey struct {
10571	autorest.Response `json:"-"`
10572	// Value - The virtual network connection shared key value.
10573	Value *string `json:"value,omitempty"`
10574	// ID - Resource ID.
10575	ID *string `json:"id,omitempty"`
10576}
10577
10578// ConnectionStateSnapshot connection state snapshot.
10579type ConnectionStateSnapshot struct {
10580	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
10581	ConnectionState ConnectionState `json:"connectionState,omitempty"`
10582	// StartTime - The start time of the connection snapshot.
10583	StartTime *date.Time `json:"startTime,omitempty"`
10584	// EndTime - The end time of the connection snapshot.
10585	EndTime *date.Time `json:"endTime,omitempty"`
10586	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
10587	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
10588	// AvgLatencyInMs - Average latency in ms.
10589	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
10590	// MinLatencyInMs - Minimum latency in ms.
10591	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
10592	// MaxLatencyInMs - Maximum latency in ms.
10593	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
10594	// ProbesSent - The number of sent probes.
10595	ProbesSent *int32 `json:"probesSent,omitempty"`
10596	// ProbesFailed - The number of failed probes.
10597	ProbesFailed *int32 `json:"probesFailed,omitempty"`
10598	// Hops - READ-ONLY; List of hops between the source and the destination.
10599	Hops *[]ConnectivityHop `json:"hops,omitempty"`
10600}
10601
10602// ConnectivityDestination parameters that define destination of connection.
10603type ConnectivityDestination struct {
10604	// ResourceID - The ID of the resource to which a connection attempt will be made.
10605	ResourceID *string `json:"resourceId,omitempty"`
10606	// Address - The IP address or URI the resource to which a connection attempt will be made.
10607	Address *string `json:"address,omitempty"`
10608	// Port - Port on which check connectivity will be performed.
10609	Port *int32 `json:"port,omitempty"`
10610}
10611
10612// ConnectivityHop information about a hop between the source and the destination.
10613type ConnectivityHop struct {
10614	// Type - READ-ONLY; The type of the hop.
10615	Type *string `json:"type,omitempty"`
10616	// ID - READ-ONLY; The ID of the hop.
10617	ID *string `json:"id,omitempty"`
10618	// Address - READ-ONLY; The IP address of the hop.
10619	Address *string `json:"address,omitempty"`
10620	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
10621	ResourceID *string `json:"resourceId,omitempty"`
10622	// NextHopIds - READ-ONLY; List of next hop identifiers.
10623	NextHopIds *[]string `json:"nextHopIds,omitempty"`
10624	// PreviousHopIds - READ-ONLY; List of previous hop identifiers.
10625	PreviousHopIds *[]string `json:"previousHopIds,omitempty"`
10626	// Links - READ-ONLY; List of hop links.
10627	Links *[]HopLink `json:"links,omitempty"`
10628	// PreviousLinks - READ-ONLY; List of previous hop links.
10629	PreviousLinks *[]HopLink `json:"previousLinks,omitempty"`
10630	// Issues - READ-ONLY; List of issues.
10631	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
10632}
10633
10634// ConnectivityInformation information on the connectivity status.
10635type ConnectivityInformation struct {
10636	autorest.Response `json:"-"`
10637	// Hops - READ-ONLY; List of hops between the source and the destination.
10638	Hops *[]ConnectivityHop `json:"hops,omitempty"`
10639	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
10640	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
10641	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
10642	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
10643	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
10644	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
10645	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
10646	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
10647	// ProbesSent - READ-ONLY; Total number of probes sent.
10648	ProbesSent *int32 `json:"probesSent,omitempty"`
10649	// ProbesFailed - READ-ONLY; Number of failed probes.
10650	ProbesFailed *int32 `json:"probesFailed,omitempty"`
10651}
10652
10653// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
10654type ConnectivityIssue struct {
10655	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
10656	Origin Origin `json:"origin,omitempty"`
10657	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
10658	Severity Severity `json:"severity,omitempty"`
10659	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
10660	Type IssueType `json:"type,omitempty"`
10661	// Context - READ-ONLY; Provides additional context on the issue.
10662	Context *[]map[string]*string `json:"context,omitempty"`
10663}
10664
10665// ConnectivityParameters parameters that determine how the connectivity check will be performed.
10666type ConnectivityParameters struct {
10667	// Source - The source of the connection.
10668	Source *ConnectivitySource `json:"source,omitempty"`
10669	// Destination - The destination of connection.
10670	Destination *ConnectivityDestination `json:"destination,omitempty"`
10671	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
10672	Protocol Protocol `json:"protocol,omitempty"`
10673	// ProtocolConfiguration - Configuration of the protocol.
10674	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
10675	// PreferredIPVersion - Preferred IP version of the connection. Possible values include: 'IPv4', 'IPv6'
10676	PreferredIPVersion IPVersion `json:"preferredIPVersion,omitempty"`
10677}
10678
10679// ConnectivitySource parameters that define the source of the connection.
10680type ConnectivitySource struct {
10681	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
10682	ResourceID *string `json:"resourceId,omitempty"`
10683	// Port - The source port from which a connectivity check will be performed.
10684	Port *int32 `json:"port,omitempty"`
10685}
10686
10687// Container reference to container resource in remote resource provider.
10688type Container struct {
10689	// ID - Resource ID.
10690	ID *string `json:"id,omitempty"`
10691}
10692
10693// ContainerNetworkInterface container network interface child resource.
10694type ContainerNetworkInterface struct {
10695	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
10696	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
10697	// Name - The name of the resource. This name can be used to access the resource.
10698	Name *string `json:"name,omitempty"`
10699	// Type - READ-ONLY; Sub Resource type.
10700	Type *string `json:"type,omitempty"`
10701	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10702	Etag *string `json:"etag,omitempty"`
10703	// ID - Resource ID.
10704	ID *string `json:"id,omitempty"`
10705}
10706
10707// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
10708func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
10709	objectMap := make(map[string]interface{})
10710	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
10711		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
10712	}
10713	if cni.Name != nil {
10714		objectMap["name"] = cni.Name
10715	}
10716	if cni.ID != nil {
10717		objectMap["id"] = cni.ID
10718	}
10719	return json.Marshal(objectMap)
10720}
10721
10722// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
10723func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
10724	var m map[string]*json.RawMessage
10725	err := json.Unmarshal(body, &m)
10726	if err != nil {
10727		return err
10728	}
10729	for k, v := range m {
10730		switch k {
10731		case "properties":
10732			if v != nil {
10733				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
10734				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
10735				if err != nil {
10736					return err
10737				}
10738				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
10739			}
10740		case "name":
10741			if v != nil {
10742				var name string
10743				err = json.Unmarshal(*v, &name)
10744				if err != nil {
10745					return err
10746				}
10747				cni.Name = &name
10748			}
10749		case "type":
10750			if v != nil {
10751				var typeVar string
10752				err = json.Unmarshal(*v, &typeVar)
10753				if err != nil {
10754					return err
10755				}
10756				cni.Type = &typeVar
10757			}
10758		case "etag":
10759			if v != nil {
10760				var etag string
10761				err = json.Unmarshal(*v, &etag)
10762				if err != nil {
10763					return err
10764				}
10765				cni.Etag = &etag
10766			}
10767		case "id":
10768			if v != nil {
10769				var ID string
10770				err = json.Unmarshal(*v, &ID)
10771				if err != nil {
10772					return err
10773				}
10774				cni.ID = &ID
10775			}
10776		}
10777	}
10778
10779	return nil
10780}
10781
10782// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
10783type ContainerNetworkInterfaceConfiguration struct {
10784	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
10785	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
10786	// Name - The name of the resource. This name can be used to access the resource.
10787	Name *string `json:"name,omitempty"`
10788	// Type - READ-ONLY; Sub Resource type.
10789	Type *string `json:"type,omitempty"`
10790	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10791	Etag *string `json:"etag,omitempty"`
10792	// ID - Resource ID.
10793	ID *string `json:"id,omitempty"`
10794}
10795
10796// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
10797func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
10798	objectMap := make(map[string]interface{})
10799	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
10800		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
10801	}
10802	if cnic.Name != nil {
10803		objectMap["name"] = cnic.Name
10804	}
10805	if cnic.ID != nil {
10806		objectMap["id"] = cnic.ID
10807	}
10808	return json.Marshal(objectMap)
10809}
10810
10811// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
10812func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
10813	var m map[string]*json.RawMessage
10814	err := json.Unmarshal(body, &m)
10815	if err != nil {
10816		return err
10817	}
10818	for k, v := range m {
10819		switch k {
10820		case "properties":
10821			if v != nil {
10822				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
10823				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
10824				if err != nil {
10825					return err
10826				}
10827				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
10828			}
10829		case "name":
10830			if v != nil {
10831				var name string
10832				err = json.Unmarshal(*v, &name)
10833				if err != nil {
10834					return err
10835				}
10836				cnic.Name = &name
10837			}
10838		case "type":
10839			if v != nil {
10840				var typeVar string
10841				err = json.Unmarshal(*v, &typeVar)
10842				if err != nil {
10843					return err
10844				}
10845				cnic.Type = &typeVar
10846			}
10847		case "etag":
10848			if v != nil {
10849				var etag string
10850				err = json.Unmarshal(*v, &etag)
10851				if err != nil {
10852					return err
10853				}
10854				cnic.Etag = &etag
10855			}
10856		case "id":
10857			if v != nil {
10858				var ID string
10859				err = json.Unmarshal(*v, &ID)
10860				if err != nil {
10861					return err
10862				}
10863				cnic.ID = &ID
10864			}
10865		}
10866	}
10867
10868	return nil
10869}
10870
10871// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
10872// properties.
10873type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
10874	// IPConfigurations - A list of ip configurations of the container network interface configuration.
10875	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
10876	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
10877	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
10878	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10879	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10880}
10881
10882// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
10883type ContainerNetworkInterfaceIPConfiguration struct {
10884	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
10885	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
10886	// Name - The name of the resource. This name can be used to access the resource.
10887	Name *string `json:"name,omitempty"`
10888	// Type - READ-ONLY; Sub Resource type.
10889	Type *string `json:"type,omitempty"`
10890	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10891	Etag *string `json:"etag,omitempty"`
10892}
10893
10894// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
10895func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
10896	objectMap := make(map[string]interface{})
10897	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
10898		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
10899	}
10900	if cniic.Name != nil {
10901		objectMap["name"] = cniic.Name
10902	}
10903	return json.Marshal(objectMap)
10904}
10905
10906// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
10907func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
10908	var m map[string]*json.RawMessage
10909	err := json.Unmarshal(body, &m)
10910	if err != nil {
10911		return err
10912	}
10913	for k, v := range m {
10914		switch k {
10915		case "properties":
10916			if v != nil {
10917				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
10918				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
10919				if err != nil {
10920					return err
10921				}
10922				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
10923			}
10924		case "name":
10925			if v != nil {
10926				var name string
10927				err = json.Unmarshal(*v, &name)
10928				if err != nil {
10929					return err
10930				}
10931				cniic.Name = &name
10932			}
10933		case "type":
10934			if v != nil {
10935				var typeVar string
10936				err = json.Unmarshal(*v, &typeVar)
10937				if err != nil {
10938					return err
10939				}
10940				cniic.Type = &typeVar
10941			}
10942		case "etag":
10943			if v != nil {
10944				var etag string
10945				err = json.Unmarshal(*v, &etag)
10946				if err != nil {
10947					return err
10948				}
10949				cniic.Etag = &etag
10950			}
10951		}
10952	}
10953
10954	return nil
10955}
10956
10957// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
10958// IP configuration.
10959type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
10960	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10961	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10962}
10963
10964// ContainerNetworkInterfacePropertiesFormat properties of container network interface.
10965type ContainerNetworkInterfacePropertiesFormat struct {
10966	// ContainerNetworkInterfaceConfiguration - READ-ONLY; Container network interface configuration from which this container network interface is created.
10967	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
10968	// Container - Reference to the container to which this container network interface is attached.
10969	Container *Container `json:"container,omitempty"`
10970	// IPConfigurations - READ-ONLY; Reference to the ip configuration on this container nic.
10971	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
10972	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10973	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10974}
10975
10976// CustomDNSConfigPropertiesFormat contains custom Dns resolution configuration from customer.
10977type CustomDNSConfigPropertiesFormat struct {
10978	// Fqdn - Fqdn that resolves to private endpoint ip address.
10979	Fqdn *string `json:"fqdn,omitempty"`
10980	// IPAddresses - A list of private ip addresses of the private endpoint.
10981	IPAddresses *[]string `json:"ipAddresses,omitempty"`
10982}
10983
10984// DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
10985// long-running operation.
10986type DdosCustomPoliciesCreateOrUpdateFuture struct {
10987	azure.Future
10988}
10989
10990// Result returns the result of the asynchronous operation.
10991// If the operation has not completed it will return an error.
10992func (future *DdosCustomPoliciesCreateOrUpdateFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
10993	var done bool
10994	done, err = future.DoneWithContext(context.Background(), client)
10995	if err != nil {
10996		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10997		return
10998	}
10999	if !done {
11000		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
11001		return
11002	}
11003	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11004	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
11005		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
11006		if err != nil {
11007			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
11008		}
11009	}
11010	return
11011}
11012
11013// DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
11014// long-running operation.
11015type DdosCustomPoliciesDeleteFuture struct {
11016	azure.Future
11017}
11018
11019// Result returns the result of the asynchronous operation.
11020// If the operation has not completed it will return an error.
11021func (future *DdosCustomPoliciesDeleteFuture) Result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
11022	var done bool
11023	done, err = future.DoneWithContext(context.Background(), client)
11024	if err != nil {
11025		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
11026		return
11027	}
11028	if !done {
11029		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
11030		return
11031	}
11032	ar.Response = future.Response()
11033	return
11034}
11035
11036// DdosCustomPolicy a DDoS custom policy in a resource group.
11037type DdosCustomPolicy struct {
11038	autorest.Response `json:"-"`
11039	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
11040	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
11041	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11042	Etag *string `json:"etag,omitempty"`
11043	// ID - Resource ID.
11044	ID *string `json:"id,omitempty"`
11045	// Name - READ-ONLY; Resource name.
11046	Name *string `json:"name,omitempty"`
11047	// Type - READ-ONLY; Resource type.
11048	Type *string `json:"type,omitempty"`
11049	// Location - Resource location.
11050	Location *string `json:"location,omitempty"`
11051	// Tags - Resource tags.
11052	Tags map[string]*string `json:"tags"`
11053}
11054
11055// MarshalJSON is the custom marshaler for DdosCustomPolicy.
11056func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
11057	objectMap := make(map[string]interface{})
11058	if dcp.DdosCustomPolicyPropertiesFormat != nil {
11059		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
11060	}
11061	if dcp.ID != nil {
11062		objectMap["id"] = dcp.ID
11063	}
11064	if dcp.Location != nil {
11065		objectMap["location"] = dcp.Location
11066	}
11067	if dcp.Tags != nil {
11068		objectMap["tags"] = dcp.Tags
11069	}
11070	return json.Marshal(objectMap)
11071}
11072
11073// UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
11074func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
11075	var m map[string]*json.RawMessage
11076	err := json.Unmarshal(body, &m)
11077	if err != nil {
11078		return err
11079	}
11080	for k, v := range m {
11081		switch k {
11082		case "properties":
11083			if v != nil {
11084				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
11085				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
11086				if err != nil {
11087					return err
11088				}
11089				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
11090			}
11091		case "etag":
11092			if v != nil {
11093				var etag string
11094				err = json.Unmarshal(*v, &etag)
11095				if err != nil {
11096					return err
11097				}
11098				dcp.Etag = &etag
11099			}
11100		case "id":
11101			if v != nil {
11102				var ID string
11103				err = json.Unmarshal(*v, &ID)
11104				if err != nil {
11105					return err
11106				}
11107				dcp.ID = &ID
11108			}
11109		case "name":
11110			if v != nil {
11111				var name string
11112				err = json.Unmarshal(*v, &name)
11113				if err != nil {
11114					return err
11115				}
11116				dcp.Name = &name
11117			}
11118		case "type":
11119			if v != nil {
11120				var typeVar string
11121				err = json.Unmarshal(*v, &typeVar)
11122				if err != nil {
11123					return err
11124				}
11125				dcp.Type = &typeVar
11126			}
11127		case "location":
11128			if v != nil {
11129				var location string
11130				err = json.Unmarshal(*v, &location)
11131				if err != nil {
11132					return err
11133				}
11134				dcp.Location = &location
11135			}
11136		case "tags":
11137			if v != nil {
11138				var tags map[string]*string
11139				err = json.Unmarshal(*v, &tags)
11140				if err != nil {
11141					return err
11142				}
11143				dcp.Tags = tags
11144			}
11145		}
11146	}
11147
11148	return nil
11149}
11150
11151// DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
11152type DdosCustomPolicyPropertiesFormat struct {
11153	// ResourceGUID - READ-ONLY; The resource GUID property of the DDoS custom policy resource. It uniquely identifies the resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
11154	ResourceGUID *string `json:"resourceGuid,omitempty"`
11155	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11156	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11157	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
11158	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
11159	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
11160	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
11161}
11162
11163// DdosProtectionPlan a DDoS protection plan in a resource group.
11164type DdosProtectionPlan struct {
11165	autorest.Response `json:"-"`
11166	// ID - READ-ONLY; Resource ID.
11167	ID *string `json:"id,omitempty"`
11168	// Name - READ-ONLY; Resource name.
11169	Name *string `json:"name,omitempty"`
11170	// Type - READ-ONLY; Resource type.
11171	Type *string `json:"type,omitempty"`
11172	// Location - Resource location.
11173	Location *string `json:"location,omitempty"`
11174	// Tags - Resource tags.
11175	Tags map[string]*string `json:"tags"`
11176	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
11177	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
11178	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11179	Etag *string `json:"etag,omitempty"`
11180}
11181
11182// MarshalJSON is the custom marshaler for DdosProtectionPlan.
11183func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
11184	objectMap := make(map[string]interface{})
11185	if dpp.Location != nil {
11186		objectMap["location"] = dpp.Location
11187	}
11188	if dpp.Tags != nil {
11189		objectMap["tags"] = dpp.Tags
11190	}
11191	if dpp.DdosProtectionPlanPropertiesFormat != nil {
11192		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
11193	}
11194	return json.Marshal(objectMap)
11195}
11196
11197// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
11198func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
11199	var m map[string]*json.RawMessage
11200	err := json.Unmarshal(body, &m)
11201	if err != nil {
11202		return err
11203	}
11204	for k, v := range m {
11205		switch k {
11206		case "id":
11207			if v != nil {
11208				var ID string
11209				err = json.Unmarshal(*v, &ID)
11210				if err != nil {
11211					return err
11212				}
11213				dpp.ID = &ID
11214			}
11215		case "name":
11216			if v != nil {
11217				var name string
11218				err = json.Unmarshal(*v, &name)
11219				if err != nil {
11220					return err
11221				}
11222				dpp.Name = &name
11223			}
11224		case "type":
11225			if v != nil {
11226				var typeVar string
11227				err = json.Unmarshal(*v, &typeVar)
11228				if err != nil {
11229					return err
11230				}
11231				dpp.Type = &typeVar
11232			}
11233		case "location":
11234			if v != nil {
11235				var location string
11236				err = json.Unmarshal(*v, &location)
11237				if err != nil {
11238					return err
11239				}
11240				dpp.Location = &location
11241			}
11242		case "tags":
11243			if v != nil {
11244				var tags map[string]*string
11245				err = json.Unmarshal(*v, &tags)
11246				if err != nil {
11247					return err
11248				}
11249				dpp.Tags = tags
11250			}
11251		case "properties":
11252			if v != nil {
11253				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
11254				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
11255				if err != nil {
11256					return err
11257				}
11258				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
11259			}
11260		case "etag":
11261			if v != nil {
11262				var etag string
11263				err = json.Unmarshal(*v, &etag)
11264				if err != nil {
11265					return err
11266				}
11267				dpp.Etag = &etag
11268			}
11269		}
11270	}
11271
11272	return nil
11273}
11274
11275// DdosProtectionPlanListResult a list of DDoS protection plans.
11276type DdosProtectionPlanListResult struct {
11277	autorest.Response `json:"-"`
11278	// Value - A list of DDoS protection plans.
11279	Value *[]DdosProtectionPlan `json:"value,omitempty"`
11280	// NextLink - READ-ONLY; The URL to get the next set of results.
11281	NextLink *string `json:"nextLink,omitempty"`
11282}
11283
11284// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
11285type DdosProtectionPlanListResultIterator struct {
11286	i    int
11287	page DdosProtectionPlanListResultPage
11288}
11289
11290// NextWithContext advances to the next value.  If there was an error making
11291// the request the iterator does not advance and the error is returned.
11292func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
11293	if tracing.IsEnabled() {
11294		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
11295		defer func() {
11296			sc := -1
11297			if iter.Response().Response.Response != nil {
11298				sc = iter.Response().Response.Response.StatusCode
11299			}
11300			tracing.EndSpan(ctx, sc, err)
11301		}()
11302	}
11303	iter.i++
11304	if iter.i < len(iter.page.Values()) {
11305		return nil
11306	}
11307	err = iter.page.NextWithContext(ctx)
11308	if err != nil {
11309		iter.i--
11310		return err
11311	}
11312	iter.i = 0
11313	return nil
11314}
11315
11316// Next advances to the next value.  If there was an error making
11317// the request the iterator does not advance and the error is returned.
11318// Deprecated: Use NextWithContext() instead.
11319func (iter *DdosProtectionPlanListResultIterator) Next() error {
11320	return iter.NextWithContext(context.Background())
11321}
11322
11323// NotDone returns true if the enumeration should be started or is not yet complete.
11324func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
11325	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11326}
11327
11328// Response returns the raw server response from the last page request.
11329func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
11330	return iter.page.Response()
11331}
11332
11333// Value returns the current value or a zero-initialized value if the
11334// iterator has advanced beyond the end of the collection.
11335func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
11336	if !iter.page.NotDone() {
11337		return DdosProtectionPlan{}
11338	}
11339	return iter.page.Values()[iter.i]
11340}
11341
11342// Creates a new instance of the DdosProtectionPlanListResultIterator type.
11343func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
11344	return DdosProtectionPlanListResultIterator{page: page}
11345}
11346
11347// IsEmpty returns true if the ListResult contains no values.
11348func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
11349	return dpplr.Value == nil || len(*dpplr.Value) == 0
11350}
11351
11352// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
11353// It returns nil if no more results exist.
11354func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
11355	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
11356		return nil, nil
11357	}
11358	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11359		autorest.AsJSON(),
11360		autorest.AsGet(),
11361		autorest.WithBaseURL(to.String(dpplr.NextLink)))
11362}
11363
11364// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
11365type DdosProtectionPlanListResultPage struct {
11366	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
11367	dpplr DdosProtectionPlanListResult
11368}
11369
11370// NextWithContext advances to the next page of values.  If there was an error making
11371// the request the page does not advance and the error is returned.
11372func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
11373	if tracing.IsEnabled() {
11374		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
11375		defer func() {
11376			sc := -1
11377			if page.Response().Response.Response != nil {
11378				sc = page.Response().Response.Response.StatusCode
11379			}
11380			tracing.EndSpan(ctx, sc, err)
11381		}()
11382	}
11383	next, err := page.fn(ctx, page.dpplr)
11384	if err != nil {
11385		return err
11386	}
11387	page.dpplr = next
11388	return nil
11389}
11390
11391// Next advances to the next page of values.  If there was an error making
11392// the request the page does not advance and the error is returned.
11393// Deprecated: Use NextWithContext() instead.
11394func (page *DdosProtectionPlanListResultPage) Next() error {
11395	return page.NextWithContext(context.Background())
11396}
11397
11398// NotDone returns true if the page enumeration should be started or is not yet complete.
11399func (page DdosProtectionPlanListResultPage) NotDone() bool {
11400	return !page.dpplr.IsEmpty()
11401}
11402
11403// Response returns the raw server response from the last page request.
11404func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
11405	return page.dpplr
11406}
11407
11408// Values returns the slice of values for the current page or nil if there are no values.
11409func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
11410	if page.dpplr.IsEmpty() {
11411		return nil
11412	}
11413	return *page.dpplr.Value
11414}
11415
11416// Creates a new instance of the DdosProtectionPlanListResultPage type.
11417func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
11418	return DdosProtectionPlanListResultPage{fn: getNextPage}
11419}
11420
11421// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
11422type DdosProtectionPlanPropertiesFormat struct {
11423	// ResourceGUID - READ-ONLY; The resource GUID property of the DDoS protection plan resource. It uniquely identifies the resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
11424	ResourceGUID *string `json:"resourceGuid,omitempty"`
11425	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11426	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11427	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
11428	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
11429}
11430
11431// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11432// long-running operation.
11433type DdosProtectionPlansCreateOrUpdateFuture struct {
11434	azure.Future
11435}
11436
11437// Result returns the result of the asynchronous operation.
11438// If the operation has not completed it will return an error.
11439func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
11440	var done bool
11441	done, err = future.DoneWithContext(context.Background(), client)
11442	if err != nil {
11443		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11444		return
11445	}
11446	if !done {
11447		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
11448		return
11449	}
11450	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11451	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
11452		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
11453		if err != nil {
11454			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
11455		}
11456	}
11457	return
11458}
11459
11460// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
11461// long-running operation.
11462type DdosProtectionPlansDeleteFuture struct {
11463	azure.Future
11464}
11465
11466// Result returns the result of the asynchronous operation.
11467// If the operation has not completed it will return an error.
11468func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
11469	var done bool
11470	done, err = future.DoneWithContext(context.Background(), client)
11471	if err != nil {
11472		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
11473		return
11474	}
11475	if !done {
11476		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
11477		return
11478	}
11479	ar.Response = future.Response()
11480	return
11481}
11482
11483// DdosSettings contains the DDoS protection settings of the public IP.
11484type DdosSettings struct {
11485	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
11486	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
11487	// ProtectionCoverage - The DDoS protection policy customizability of the public IP. Only standard coverage will have the ability to be customized. Possible values include: 'DdosSettingsProtectionCoverageBasic', 'DdosSettingsProtectionCoverageStandard'
11488	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
11489	// ProtectedIP - Enables DDoS protection on the public IP.
11490	ProtectedIP *bool `json:"protectedIP,omitempty"`
11491}
11492
11493// Delegation details the service to which the subnet is delegated.
11494type Delegation struct {
11495	// ServiceDelegationPropertiesFormat - Properties of the subnet.
11496	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
11497	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
11498	Name *string `json:"name,omitempty"`
11499	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11500	Etag *string `json:"etag,omitempty"`
11501	// ID - Resource ID.
11502	ID *string `json:"id,omitempty"`
11503}
11504
11505// MarshalJSON is the custom marshaler for Delegation.
11506func (d Delegation) MarshalJSON() ([]byte, error) {
11507	objectMap := make(map[string]interface{})
11508	if d.ServiceDelegationPropertiesFormat != nil {
11509		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
11510	}
11511	if d.Name != nil {
11512		objectMap["name"] = d.Name
11513	}
11514	if d.ID != nil {
11515		objectMap["id"] = d.ID
11516	}
11517	return json.Marshal(objectMap)
11518}
11519
11520// UnmarshalJSON is the custom unmarshaler for Delegation struct.
11521func (d *Delegation) UnmarshalJSON(body []byte) error {
11522	var m map[string]*json.RawMessage
11523	err := json.Unmarshal(body, &m)
11524	if err != nil {
11525		return err
11526	}
11527	for k, v := range m {
11528		switch k {
11529		case "properties":
11530			if v != nil {
11531				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
11532				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
11533				if err != nil {
11534					return err
11535				}
11536				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
11537			}
11538		case "name":
11539			if v != nil {
11540				var name string
11541				err = json.Unmarshal(*v, &name)
11542				if err != nil {
11543					return err
11544				}
11545				d.Name = &name
11546			}
11547		case "etag":
11548			if v != nil {
11549				var etag string
11550				err = json.Unmarshal(*v, &etag)
11551				if err != nil {
11552					return err
11553				}
11554				d.Etag = &etag
11555			}
11556		case "id":
11557			if v != nil {
11558				var ID string
11559				err = json.Unmarshal(*v, &ID)
11560				if err != nil {
11561					return err
11562				}
11563				d.ID = &ID
11564			}
11565		}
11566	}
11567
11568	return nil
11569}
11570
11571// DeleteBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a
11572// long-running operation.
11573type DeleteBastionShareableLinkFuture struct {
11574	azure.Future
11575}
11576
11577// Result returns the result of the asynchronous operation.
11578// If the operation has not completed it will return an error.
11579func (future *DeleteBastionShareableLinkFuture) Result(client BaseClient) (ar autorest.Response, err error) {
11580	var done bool
11581	done, err = future.DoneWithContext(context.Background(), client)
11582	if err != nil {
11583		err = autorest.NewErrorWithError(err, "network.DeleteBastionShareableLinkFuture", "Result", future.Response(), "Polling failure")
11584		return
11585	}
11586	if !done {
11587		err = azure.NewAsyncOpIncompleteError("network.DeleteBastionShareableLinkFuture")
11588		return
11589	}
11590	ar.Response = future.Response()
11591	return
11592}
11593
11594// DeviceProperties list of properties of the device.
11595type DeviceProperties struct {
11596	// DeviceVendor - Name of the device Vendor.
11597	DeviceVendor *string `json:"deviceVendor,omitempty"`
11598	// DeviceModel - Model of the device.
11599	DeviceModel *string `json:"deviceModel,omitempty"`
11600	// LinkSpeedInMbps - Link speed.
11601	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
11602}
11603
11604// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
11605// network. Standard DHCP option for a subnet overrides VNET DHCP options.
11606type DhcpOptions struct {
11607	// DNSServers - The list of DNS servers IP addresses.
11608	DNSServers *[]string `json:"dnsServers,omitempty"`
11609}
11610
11611// Dimension dimension of the metric.
11612type Dimension struct {
11613	// Name - The name of the dimension.
11614	Name *string `json:"name,omitempty"`
11615	// DisplayName - The display name of the dimension.
11616	DisplayName *string `json:"displayName,omitempty"`
11617	// InternalName - The internal name of the dimension.
11618	InternalName *string `json:"internalName,omitempty"`
11619}
11620
11621// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
11622type DNSNameAvailabilityResult struct {
11623	autorest.Response `json:"-"`
11624	// Available - Domain availability (True/False).
11625	Available *bool `json:"available,omitempty"`
11626}
11627
11628// DNSSettings DNS Proxy Settings in Firewall Policy.
11629type DNSSettings struct {
11630	// Servers - List of Custom DNS Servers.
11631	Servers *[]string `json:"servers,omitempty"`
11632	// EnableProxy - Enable DNS Proxy on Firewalls attached to the Firewall Policy.
11633	EnableProxy *bool `json:"enableProxy,omitempty"`
11634	// RequireProxyForNetworkRules - FQDNs in Network Rules are supported when set to true.
11635	RequireProxyForNetworkRules *bool `json:"requireProxyForNetworkRules,omitempty"`
11636}
11637
11638// EffectiveNetworkSecurityGroup effective network security group.
11639type EffectiveNetworkSecurityGroup struct {
11640	// NetworkSecurityGroup - The ID of network security group that is applied.
11641	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
11642	// Association - Associated resources.
11643	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
11644	// EffectiveSecurityRules - A collection of effective security rules.
11645	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
11646	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
11647	TagMap map[string][]string `json:"tagMap"`
11648}
11649
11650// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
11651func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
11652	objectMap := make(map[string]interface{})
11653	if ensg.NetworkSecurityGroup != nil {
11654		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
11655	}
11656	if ensg.Association != nil {
11657		objectMap["association"] = ensg.Association
11658	}
11659	if ensg.EffectiveSecurityRules != nil {
11660		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
11661	}
11662	if ensg.TagMap != nil {
11663		objectMap["tagMap"] = ensg.TagMap
11664	}
11665	return json.Marshal(objectMap)
11666}
11667
11668// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
11669type EffectiveNetworkSecurityGroupAssociation struct {
11670	// Subnet - The ID of the subnet if assigned.
11671	Subnet *SubResource `json:"subnet,omitempty"`
11672	// NetworkInterface - The ID of the network interface if assigned.
11673	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
11674}
11675
11676// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
11677// call.
11678type EffectiveNetworkSecurityGroupListResult struct {
11679	autorest.Response `json:"-"`
11680	// Value - A list of effective network security groups.
11681	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
11682	// NextLink - READ-ONLY; The URL to get the next set of results.
11683	NextLink *string `json:"nextLink,omitempty"`
11684}
11685
11686// EffectiveNetworkSecurityRule effective network security rules.
11687type EffectiveNetworkSecurityRule struct {
11688	// Name - The name of the security rule specified by the user (if created by the user).
11689	Name *string `json:"name,omitempty"`
11690	// Protocol - The network protocol this rule applies to. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
11691	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
11692	// SourcePortRange - The source port or range.
11693	SourcePortRange *string `json:"sourcePortRange,omitempty"`
11694	// DestinationPortRange - The destination port or range.
11695	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
11696	// SourcePortRanges - The source port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as separator (e.g. 100-400), or an asterisk (*).
11697	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
11698	// DestinationPortRanges - The destination port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as separator (e.g. 100-400), or an asterisk (*).
11699	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
11700	// SourceAddressPrefix - The source address prefix.
11701	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
11702	// DestinationAddressPrefix - The destination address prefix.
11703	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
11704	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
11705	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
11706	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
11707	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
11708	// ExpandedSourceAddressPrefix - The expanded source address prefix.
11709	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
11710	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
11711	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
11712	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
11713	Access SecurityRuleAccess `json:"access,omitempty"`
11714	// Priority - The priority of the rule.
11715	Priority *int32 `json:"priority,omitempty"`
11716	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
11717	Direction SecurityRuleDirection `json:"direction,omitempty"`
11718}
11719
11720// EffectiveRoute effective Route.
11721type EffectiveRoute struct {
11722	// Name - The name of the user defined route. This is optional.
11723	Name *string `json:"name,omitempty"`
11724	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
11725	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
11726	// Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
11727	Source EffectiveRouteSource `json:"source,omitempty"`
11728	// State - The value of effective route. Possible values include: 'Active', 'Invalid'
11729	State EffectiveRouteState `json:"state,omitempty"`
11730	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
11731	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
11732	// NextHopIPAddress - The IP address of the next hop of the effective route.
11733	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
11734	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
11735	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
11736}
11737
11738// EffectiveRouteListResult response for list effective route API service call.
11739type EffectiveRouteListResult struct {
11740	autorest.Response `json:"-"`
11741	// Value - A list of effective routes.
11742	Value *[]EffectiveRoute `json:"value,omitempty"`
11743	// NextLink - READ-ONLY; The URL to get the next set of results.
11744	NextLink *string `json:"nextLink,omitempty"`
11745}
11746
11747// EffectiveRoutesParameters the parameters specifying the resource whose effective routes are being
11748// requested.
11749type EffectiveRoutesParameters struct {
11750	// ResourceID - The resource whose effective routes are being requested.
11751	ResourceID *Resource `json:"resourceId,omitempty"`
11752	// VirtualWanResourceType - The type of the specified resource like RouteTable, ExpressRouteConnection, HubVirtualNetworkConnection, VpnConnection and P2SConnection.
11753	VirtualWanResourceType *string `json:"virtualWanResourceType,omitempty"`
11754}
11755
11756// EndpointServiceResult endpoint service.
11757type EndpointServiceResult struct {
11758	// Name - READ-ONLY; Name of the endpoint service.
11759	Name *string `json:"name,omitempty"`
11760	// Type - READ-ONLY; Type of the endpoint service.
11761	Type *string `json:"type,omitempty"`
11762	// ID - Resource ID.
11763	ID *string `json:"id,omitempty"`
11764}
11765
11766// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
11767type EndpointServicesListResult struct {
11768	autorest.Response `json:"-"`
11769	// Value - List of available endpoint services in a region.
11770	Value *[]EndpointServiceResult `json:"value,omitempty"`
11771	// NextLink - The URL to get the next set of results.
11772	NextLink *string `json:"nextLink,omitempty"`
11773}
11774
11775// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
11776// values.
11777type EndpointServicesListResultIterator struct {
11778	i    int
11779	page EndpointServicesListResultPage
11780}
11781
11782// NextWithContext advances to the next value.  If there was an error making
11783// the request the iterator does not advance and the error is returned.
11784func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
11785	if tracing.IsEnabled() {
11786		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
11787		defer func() {
11788			sc := -1
11789			if iter.Response().Response.Response != nil {
11790				sc = iter.Response().Response.Response.StatusCode
11791			}
11792			tracing.EndSpan(ctx, sc, err)
11793		}()
11794	}
11795	iter.i++
11796	if iter.i < len(iter.page.Values()) {
11797		return nil
11798	}
11799	err = iter.page.NextWithContext(ctx)
11800	if err != nil {
11801		iter.i--
11802		return err
11803	}
11804	iter.i = 0
11805	return nil
11806}
11807
11808// Next advances to the next value.  If there was an error making
11809// the request the iterator does not advance and the error is returned.
11810// Deprecated: Use NextWithContext() instead.
11811func (iter *EndpointServicesListResultIterator) Next() error {
11812	return iter.NextWithContext(context.Background())
11813}
11814
11815// NotDone returns true if the enumeration should be started or is not yet complete.
11816func (iter EndpointServicesListResultIterator) NotDone() bool {
11817	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11818}
11819
11820// Response returns the raw server response from the last page request.
11821func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
11822	return iter.page.Response()
11823}
11824
11825// Value returns the current value or a zero-initialized value if the
11826// iterator has advanced beyond the end of the collection.
11827func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
11828	if !iter.page.NotDone() {
11829		return EndpointServiceResult{}
11830	}
11831	return iter.page.Values()[iter.i]
11832}
11833
11834// Creates a new instance of the EndpointServicesListResultIterator type.
11835func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
11836	return EndpointServicesListResultIterator{page: page}
11837}
11838
11839// IsEmpty returns true if the ListResult contains no values.
11840func (eslr EndpointServicesListResult) IsEmpty() bool {
11841	return eslr.Value == nil || len(*eslr.Value) == 0
11842}
11843
11844// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
11845// It returns nil if no more results exist.
11846func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
11847	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
11848		return nil, nil
11849	}
11850	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11851		autorest.AsJSON(),
11852		autorest.AsGet(),
11853		autorest.WithBaseURL(to.String(eslr.NextLink)))
11854}
11855
11856// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
11857type EndpointServicesListResultPage struct {
11858	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
11859	eslr EndpointServicesListResult
11860}
11861
11862// NextWithContext advances to the next page of values.  If there was an error making
11863// the request the page does not advance and the error is returned.
11864func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
11865	if tracing.IsEnabled() {
11866		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
11867		defer func() {
11868			sc := -1
11869			if page.Response().Response.Response != nil {
11870				sc = page.Response().Response.Response.StatusCode
11871			}
11872			tracing.EndSpan(ctx, sc, err)
11873		}()
11874	}
11875	next, err := page.fn(ctx, page.eslr)
11876	if err != nil {
11877		return err
11878	}
11879	page.eslr = next
11880	return nil
11881}
11882
11883// Next advances to the next page of values.  If there was an error making
11884// the request the page does not advance and the error is returned.
11885// Deprecated: Use NextWithContext() instead.
11886func (page *EndpointServicesListResultPage) Next() error {
11887	return page.NextWithContext(context.Background())
11888}
11889
11890// NotDone returns true if the page enumeration should be started or is not yet complete.
11891func (page EndpointServicesListResultPage) NotDone() bool {
11892	return !page.eslr.IsEmpty()
11893}
11894
11895// Response returns the raw server response from the last page request.
11896func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
11897	return page.eslr
11898}
11899
11900// Values returns the slice of values for the current page or nil if there are no values.
11901func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
11902	if page.eslr.IsEmpty() {
11903		return nil
11904	}
11905	return *page.eslr.Value
11906}
11907
11908// Creates a new instance of the EndpointServicesListResultPage type.
11909func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
11910	return EndpointServicesListResultPage{fn: getNextPage}
11911}
11912
11913// Error common error representation.
11914type Error struct {
11915	// Code - Error code.
11916	Code *string `json:"code,omitempty"`
11917	// Message - Error message.
11918	Message *string `json:"message,omitempty"`
11919	// Target - Error target.
11920	Target *string `json:"target,omitempty"`
11921	// Details - Error details.
11922	Details *[]ErrorDetails `json:"details,omitempty"`
11923	// InnerError - Inner error message.
11924	InnerError *string `json:"innerError,omitempty"`
11925}
11926
11927// ErrorDetails common error details representation.
11928type ErrorDetails struct {
11929	// Code - Error code.
11930	Code *string `json:"code,omitempty"`
11931	// Target - Error target.
11932	Target *string `json:"target,omitempty"`
11933	// Message - Error message.
11934	Message *string `json:"message,omitempty"`
11935}
11936
11937// ErrorResponse the error object.
11938type ErrorResponse struct {
11939	// Error - The error details object.
11940	Error *ErrorDetails `json:"error,omitempty"`
11941}
11942
11943// EvaluatedNetworkSecurityGroup results of network security group evaluation.
11944type EvaluatedNetworkSecurityGroup struct {
11945	// NetworkSecurityGroupID - Network security group ID.
11946	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
11947	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
11948	AppliedTo *string `json:"appliedTo,omitempty"`
11949	// MatchedRule - Matched network security rule.
11950	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
11951	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
11952	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
11953}
11954
11955// ExpressRouteCircuit expressRouteCircuit resource.
11956type ExpressRouteCircuit struct {
11957	autorest.Response `json:"-"`
11958	// Sku - The SKU.
11959	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
11960	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
11961	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
11962	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11963	Etag *string `json:"etag,omitempty"`
11964	// ID - Resource ID.
11965	ID *string `json:"id,omitempty"`
11966	// Name - READ-ONLY; Resource name.
11967	Name *string `json:"name,omitempty"`
11968	// Type - READ-ONLY; Resource type.
11969	Type *string `json:"type,omitempty"`
11970	// Location - Resource location.
11971	Location *string `json:"location,omitempty"`
11972	// Tags - Resource tags.
11973	Tags map[string]*string `json:"tags"`
11974}
11975
11976// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
11977func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
11978	objectMap := make(map[string]interface{})
11979	if erc.Sku != nil {
11980		objectMap["sku"] = erc.Sku
11981	}
11982	if erc.ExpressRouteCircuitPropertiesFormat != nil {
11983		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
11984	}
11985	if erc.ID != nil {
11986		objectMap["id"] = erc.ID
11987	}
11988	if erc.Location != nil {
11989		objectMap["location"] = erc.Location
11990	}
11991	if erc.Tags != nil {
11992		objectMap["tags"] = erc.Tags
11993	}
11994	return json.Marshal(objectMap)
11995}
11996
11997// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
11998func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
11999	var m map[string]*json.RawMessage
12000	err := json.Unmarshal(body, &m)
12001	if err != nil {
12002		return err
12003	}
12004	for k, v := range m {
12005		switch k {
12006		case "sku":
12007			if v != nil {
12008				var sku ExpressRouteCircuitSku
12009				err = json.Unmarshal(*v, &sku)
12010				if err != nil {
12011					return err
12012				}
12013				erc.Sku = &sku
12014			}
12015		case "properties":
12016			if v != nil {
12017				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
12018				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
12019				if err != nil {
12020					return err
12021				}
12022				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
12023			}
12024		case "etag":
12025			if v != nil {
12026				var etag string
12027				err = json.Unmarshal(*v, &etag)
12028				if err != nil {
12029					return err
12030				}
12031				erc.Etag = &etag
12032			}
12033		case "id":
12034			if v != nil {
12035				var ID string
12036				err = json.Unmarshal(*v, &ID)
12037				if err != nil {
12038					return err
12039				}
12040				erc.ID = &ID
12041			}
12042		case "name":
12043			if v != nil {
12044				var name string
12045				err = json.Unmarshal(*v, &name)
12046				if err != nil {
12047					return err
12048				}
12049				erc.Name = &name
12050			}
12051		case "type":
12052			if v != nil {
12053				var typeVar string
12054				err = json.Unmarshal(*v, &typeVar)
12055				if err != nil {
12056					return err
12057				}
12058				erc.Type = &typeVar
12059			}
12060		case "location":
12061			if v != nil {
12062				var location string
12063				err = json.Unmarshal(*v, &location)
12064				if err != nil {
12065					return err
12066				}
12067				erc.Location = &location
12068			}
12069		case "tags":
12070			if v != nil {
12071				var tags map[string]*string
12072				err = json.Unmarshal(*v, &tags)
12073				if err != nil {
12074					return err
12075				}
12076				erc.Tags = tags
12077			}
12078		}
12079	}
12080
12081	return nil
12082}
12083
12084// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
12085type ExpressRouteCircuitArpTable struct {
12086	// Age - Entry age in minutes.
12087	Age *int32 `json:"age,omitempty"`
12088	// Interface - Interface address.
12089	Interface *string `json:"interface,omitempty"`
12090	// IPAddress - The IP address.
12091	IPAddress *string `json:"ipAddress,omitempty"`
12092	// MacAddress - The MAC address.
12093	MacAddress *string `json:"macAddress,omitempty"`
12094}
12095
12096// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
12097type ExpressRouteCircuitAuthorization struct {
12098	autorest.Response `json:"-"`
12099	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
12100	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
12101	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12102	Name *string `json:"name,omitempty"`
12103	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12104	Etag *string `json:"etag,omitempty"`
12105	// Type - READ-ONLY; Type of the resource.
12106	Type *string `json:"type,omitempty"`
12107	// ID - Resource ID.
12108	ID *string `json:"id,omitempty"`
12109}
12110
12111// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
12112func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
12113	objectMap := make(map[string]interface{})
12114	if erca.AuthorizationPropertiesFormat != nil {
12115		objectMap["properties"] = erca.AuthorizationPropertiesFormat
12116	}
12117	if erca.Name != nil {
12118		objectMap["name"] = erca.Name
12119	}
12120	if erca.ID != nil {
12121		objectMap["id"] = erca.ID
12122	}
12123	return json.Marshal(objectMap)
12124}
12125
12126// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
12127func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
12128	var m map[string]*json.RawMessage
12129	err := json.Unmarshal(body, &m)
12130	if err != nil {
12131		return err
12132	}
12133	for k, v := range m {
12134		switch k {
12135		case "properties":
12136			if v != nil {
12137				var authorizationPropertiesFormat AuthorizationPropertiesFormat
12138				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
12139				if err != nil {
12140					return err
12141				}
12142				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
12143			}
12144		case "name":
12145			if v != nil {
12146				var name string
12147				err = json.Unmarshal(*v, &name)
12148				if err != nil {
12149					return err
12150				}
12151				erca.Name = &name
12152			}
12153		case "etag":
12154			if v != nil {
12155				var etag string
12156				err = json.Unmarshal(*v, &etag)
12157				if err != nil {
12158					return err
12159				}
12160				erca.Etag = &etag
12161			}
12162		case "type":
12163			if v != nil {
12164				var typeVar string
12165				err = json.Unmarshal(*v, &typeVar)
12166				if err != nil {
12167					return err
12168				}
12169				erca.Type = &typeVar
12170			}
12171		case "id":
12172			if v != nil {
12173				var ID string
12174				err = json.Unmarshal(*v, &ID)
12175				if err != nil {
12176					return err
12177				}
12178				erca.ID = &ID
12179			}
12180		}
12181	}
12182
12183	return nil
12184}
12185
12186// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12187// results of a long-running operation.
12188type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
12189	azure.Future
12190}
12191
12192// Result returns the result of the asynchronous operation.
12193// If the operation has not completed it will return an error.
12194func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
12195	var done bool
12196	done, err = future.DoneWithContext(context.Background(), client)
12197	if err != nil {
12198		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12199		return
12200	}
12201	if !done {
12202		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
12203		return
12204	}
12205	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12206	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
12207		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
12208		if err != nil {
12209			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
12210		}
12211	}
12212	return
12213}
12214
12215// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
12216// of a long-running operation.
12217type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
12218	azure.Future
12219}
12220
12221// Result returns the result of the asynchronous operation.
12222// If the operation has not completed it will return an error.
12223func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
12224	var done bool
12225	done, err = future.DoneWithContext(context.Background(), client)
12226	if err != nil {
12227		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
12228		return
12229	}
12230	if !done {
12231		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
12232		return
12233	}
12234	ar.Response = future.Response()
12235	return
12236}
12237
12238// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
12239// resource.
12240type ExpressRouteCircuitConnection struct {
12241	autorest.Response `json:"-"`
12242	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
12243	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
12244	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12245	Name *string `json:"name,omitempty"`
12246	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12247	Etag *string `json:"etag,omitempty"`
12248	// Type - READ-ONLY; Type of the resource.
12249	Type *string `json:"type,omitempty"`
12250	// ID - Resource ID.
12251	ID *string `json:"id,omitempty"`
12252}
12253
12254// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
12255func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
12256	objectMap := make(map[string]interface{})
12257	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
12258		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
12259	}
12260	if ercc.Name != nil {
12261		objectMap["name"] = ercc.Name
12262	}
12263	if ercc.ID != nil {
12264		objectMap["id"] = ercc.ID
12265	}
12266	return json.Marshal(objectMap)
12267}
12268
12269// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
12270func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
12271	var m map[string]*json.RawMessage
12272	err := json.Unmarshal(body, &m)
12273	if err != nil {
12274		return err
12275	}
12276	for k, v := range m {
12277		switch k {
12278		case "properties":
12279			if v != nil {
12280				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
12281				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
12282				if err != nil {
12283					return err
12284				}
12285				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
12286			}
12287		case "name":
12288			if v != nil {
12289				var name string
12290				err = json.Unmarshal(*v, &name)
12291				if err != nil {
12292					return err
12293				}
12294				ercc.Name = &name
12295			}
12296		case "etag":
12297			if v != nil {
12298				var etag string
12299				err = json.Unmarshal(*v, &etag)
12300				if err != nil {
12301					return err
12302				}
12303				ercc.Etag = &etag
12304			}
12305		case "type":
12306			if v != nil {
12307				var typeVar string
12308				err = json.Unmarshal(*v, &typeVar)
12309				if err != nil {
12310					return err
12311				}
12312				ercc.Type = &typeVar
12313			}
12314		case "id":
12315			if v != nil {
12316				var ID string
12317				err = json.Unmarshal(*v, &ID)
12318				if err != nil {
12319					return err
12320				}
12321				ercc.ID = &ID
12322			}
12323		}
12324	}
12325
12326	return nil
12327}
12328
12329// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
12330// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
12331type ExpressRouteCircuitConnectionListResult struct {
12332	autorest.Response `json:"-"`
12333	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
12334	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
12335	// NextLink - The URL to get the next set of results.
12336	NextLink *string `json:"nextLink,omitempty"`
12337}
12338
12339// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
12340// ExpressRouteCircuitConnection values.
12341type ExpressRouteCircuitConnectionListResultIterator struct {
12342	i    int
12343	page ExpressRouteCircuitConnectionListResultPage
12344}
12345
12346// NextWithContext advances to the next value.  If there was an error making
12347// the request the iterator does not advance and the error is returned.
12348func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
12349	if tracing.IsEnabled() {
12350		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
12351		defer func() {
12352			sc := -1
12353			if iter.Response().Response.Response != nil {
12354				sc = iter.Response().Response.Response.StatusCode
12355			}
12356			tracing.EndSpan(ctx, sc, err)
12357		}()
12358	}
12359	iter.i++
12360	if iter.i < len(iter.page.Values()) {
12361		return nil
12362	}
12363	err = iter.page.NextWithContext(ctx)
12364	if err != nil {
12365		iter.i--
12366		return err
12367	}
12368	iter.i = 0
12369	return nil
12370}
12371
12372// Next advances to the next value.  If there was an error making
12373// the request the iterator does not advance and the error is returned.
12374// Deprecated: Use NextWithContext() instead.
12375func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
12376	return iter.NextWithContext(context.Background())
12377}
12378
12379// NotDone returns true if the enumeration should be started or is not yet complete.
12380func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
12381	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12382}
12383
12384// Response returns the raw server response from the last page request.
12385func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
12386	return iter.page.Response()
12387}
12388
12389// Value returns the current value or a zero-initialized value if the
12390// iterator has advanced beyond the end of the collection.
12391func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
12392	if !iter.page.NotDone() {
12393		return ExpressRouteCircuitConnection{}
12394	}
12395	return iter.page.Values()[iter.i]
12396}
12397
12398// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
12399func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
12400	return ExpressRouteCircuitConnectionListResultIterator{page: page}
12401}
12402
12403// IsEmpty returns true if the ListResult contains no values.
12404func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
12405	return ercclr.Value == nil || len(*ercclr.Value) == 0
12406}
12407
12408// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
12409// It returns nil if no more results exist.
12410func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
12411	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
12412		return nil, nil
12413	}
12414	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12415		autorest.AsJSON(),
12416		autorest.AsGet(),
12417		autorest.WithBaseURL(to.String(ercclr.NextLink)))
12418}
12419
12420// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
12421type ExpressRouteCircuitConnectionListResultPage struct {
12422	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
12423	ercclr ExpressRouteCircuitConnectionListResult
12424}
12425
12426// NextWithContext advances to the next page of values.  If there was an error making
12427// the request the page does not advance and the error is returned.
12428func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
12429	if tracing.IsEnabled() {
12430		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
12431		defer func() {
12432			sc := -1
12433			if page.Response().Response.Response != nil {
12434				sc = page.Response().Response.Response.StatusCode
12435			}
12436			tracing.EndSpan(ctx, sc, err)
12437		}()
12438	}
12439	next, err := page.fn(ctx, page.ercclr)
12440	if err != nil {
12441		return err
12442	}
12443	page.ercclr = next
12444	return nil
12445}
12446
12447// Next advances to the next page of values.  If there was an error making
12448// the request the page does not advance and the error is returned.
12449// Deprecated: Use NextWithContext() instead.
12450func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
12451	return page.NextWithContext(context.Background())
12452}
12453
12454// NotDone returns true if the page enumeration should be started or is not yet complete.
12455func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
12456	return !page.ercclr.IsEmpty()
12457}
12458
12459// Response returns the raw server response from the last page request.
12460func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
12461	return page.ercclr
12462}
12463
12464// Values returns the slice of values for the current page or nil if there are no values.
12465func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
12466	if page.ercclr.IsEmpty() {
12467		return nil
12468	}
12469	return *page.ercclr.Value
12470}
12471
12472// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
12473func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
12474	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
12475}
12476
12477// ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
12478type ExpressRouteCircuitConnectionPropertiesFormat struct {
12479	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
12480	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
12481	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
12482	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
12483	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
12484	AddressPrefix *string `json:"addressPrefix,omitempty"`
12485	// AuthorizationKey - The authorization key.
12486	AuthorizationKey *string `json:"authorizationKey,omitempty"`
12487	// Ipv6CircuitConnectionConfig - IPv6 Address PrefixProperties of the express route circuit connection.
12488	Ipv6CircuitConnectionConfig *Ipv6CircuitConnectionConfig `json:"ipv6CircuitConnectionConfig,omitempty"`
12489	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
12490	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
12491	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12492	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12493}
12494
12495// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12496// results of a long-running operation.
12497type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
12498	azure.Future
12499}
12500
12501// Result returns the result of the asynchronous operation.
12502// If the operation has not completed it will return an error.
12503func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
12504	var done bool
12505	done, err = future.DoneWithContext(context.Background(), client)
12506	if err != nil {
12507		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12508		return
12509	}
12510	if !done {
12511		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
12512		return
12513	}
12514	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12515	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
12516		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
12517		if err != nil {
12518			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
12519		}
12520	}
12521	return
12522}
12523
12524// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
12525// long-running operation.
12526type ExpressRouteCircuitConnectionsDeleteFuture struct {
12527	azure.Future
12528}
12529
12530// Result returns the result of the asynchronous operation.
12531// If the operation has not completed it will return an error.
12532func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
12533	var done bool
12534	done, err = future.DoneWithContext(context.Background(), client)
12535	if err != nil {
12536		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
12537		return
12538	}
12539	if !done {
12540		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
12541		return
12542	}
12543	ar.Response = future.Response()
12544	return
12545}
12546
12547// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
12548type ExpressRouteCircuitListResult struct {
12549	autorest.Response `json:"-"`
12550	// Value - A list of ExpressRouteCircuits in a resource group.
12551	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
12552	// NextLink - The URL to get the next set of results.
12553	NextLink *string `json:"nextLink,omitempty"`
12554}
12555
12556// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
12557// values.
12558type ExpressRouteCircuitListResultIterator struct {
12559	i    int
12560	page ExpressRouteCircuitListResultPage
12561}
12562
12563// NextWithContext advances to the next value.  If there was an error making
12564// the request the iterator does not advance and the error is returned.
12565func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
12566	if tracing.IsEnabled() {
12567		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
12568		defer func() {
12569			sc := -1
12570			if iter.Response().Response.Response != nil {
12571				sc = iter.Response().Response.Response.StatusCode
12572			}
12573			tracing.EndSpan(ctx, sc, err)
12574		}()
12575	}
12576	iter.i++
12577	if iter.i < len(iter.page.Values()) {
12578		return nil
12579	}
12580	err = iter.page.NextWithContext(ctx)
12581	if err != nil {
12582		iter.i--
12583		return err
12584	}
12585	iter.i = 0
12586	return nil
12587}
12588
12589// Next advances to the next value.  If there was an error making
12590// the request the iterator does not advance and the error is returned.
12591// Deprecated: Use NextWithContext() instead.
12592func (iter *ExpressRouteCircuitListResultIterator) Next() error {
12593	return iter.NextWithContext(context.Background())
12594}
12595
12596// NotDone returns true if the enumeration should be started or is not yet complete.
12597func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
12598	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12599}
12600
12601// Response returns the raw server response from the last page request.
12602func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
12603	return iter.page.Response()
12604}
12605
12606// Value returns the current value or a zero-initialized value if the
12607// iterator has advanced beyond the end of the collection.
12608func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
12609	if !iter.page.NotDone() {
12610		return ExpressRouteCircuit{}
12611	}
12612	return iter.page.Values()[iter.i]
12613}
12614
12615// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
12616func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
12617	return ExpressRouteCircuitListResultIterator{page: page}
12618}
12619
12620// IsEmpty returns true if the ListResult contains no values.
12621func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
12622	return erclr.Value == nil || len(*erclr.Value) == 0
12623}
12624
12625// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
12626// It returns nil if no more results exist.
12627func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
12628	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
12629		return nil, nil
12630	}
12631	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12632		autorest.AsJSON(),
12633		autorest.AsGet(),
12634		autorest.WithBaseURL(to.String(erclr.NextLink)))
12635}
12636
12637// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
12638type ExpressRouteCircuitListResultPage struct {
12639	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
12640	erclr ExpressRouteCircuitListResult
12641}
12642
12643// NextWithContext advances to the next page of values.  If there was an error making
12644// the request the page does not advance and the error is returned.
12645func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
12646	if tracing.IsEnabled() {
12647		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
12648		defer func() {
12649			sc := -1
12650			if page.Response().Response.Response != nil {
12651				sc = page.Response().Response.Response.StatusCode
12652			}
12653			tracing.EndSpan(ctx, sc, err)
12654		}()
12655	}
12656	next, err := page.fn(ctx, page.erclr)
12657	if err != nil {
12658		return err
12659	}
12660	page.erclr = next
12661	return nil
12662}
12663
12664// Next advances to the next page of values.  If there was an error making
12665// the request the page does not advance and the error is returned.
12666// Deprecated: Use NextWithContext() instead.
12667func (page *ExpressRouteCircuitListResultPage) Next() error {
12668	return page.NextWithContext(context.Background())
12669}
12670
12671// NotDone returns true if the page enumeration should be started or is not yet complete.
12672func (page ExpressRouteCircuitListResultPage) NotDone() bool {
12673	return !page.erclr.IsEmpty()
12674}
12675
12676// Response returns the raw server response from the last page request.
12677func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
12678	return page.erclr
12679}
12680
12681// Values returns the slice of values for the current page or nil if there are no values.
12682func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
12683	if page.erclr.IsEmpty() {
12684		return nil
12685	}
12686	return *page.erclr.Value
12687}
12688
12689// Creates a new instance of the ExpressRouteCircuitListResultPage type.
12690func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
12691	return ExpressRouteCircuitListResultPage{fn: getNextPage}
12692}
12693
12694// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
12695type ExpressRouteCircuitPeering struct {
12696	autorest.Response `json:"-"`
12697	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
12698	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
12699	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12700	Name *string `json:"name,omitempty"`
12701	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12702	Etag *string `json:"etag,omitempty"`
12703	// Type - READ-ONLY; Type of the resource.
12704	Type *string `json:"type,omitempty"`
12705	// ID - Resource ID.
12706	ID *string `json:"id,omitempty"`
12707}
12708
12709// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
12710func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
12711	objectMap := make(map[string]interface{})
12712	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
12713		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
12714	}
12715	if ercp.Name != nil {
12716		objectMap["name"] = ercp.Name
12717	}
12718	if ercp.ID != nil {
12719		objectMap["id"] = ercp.ID
12720	}
12721	return json.Marshal(objectMap)
12722}
12723
12724// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
12725func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
12726	var m map[string]*json.RawMessage
12727	err := json.Unmarshal(body, &m)
12728	if err != nil {
12729		return err
12730	}
12731	for k, v := range m {
12732		switch k {
12733		case "properties":
12734			if v != nil {
12735				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
12736				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
12737				if err != nil {
12738					return err
12739				}
12740				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
12741			}
12742		case "name":
12743			if v != nil {
12744				var name string
12745				err = json.Unmarshal(*v, &name)
12746				if err != nil {
12747					return err
12748				}
12749				ercp.Name = &name
12750			}
12751		case "etag":
12752			if v != nil {
12753				var etag string
12754				err = json.Unmarshal(*v, &etag)
12755				if err != nil {
12756					return err
12757				}
12758				ercp.Etag = &etag
12759			}
12760		case "type":
12761			if v != nil {
12762				var typeVar string
12763				err = json.Unmarshal(*v, &typeVar)
12764				if err != nil {
12765					return err
12766				}
12767				ercp.Type = &typeVar
12768			}
12769		case "id":
12770			if v != nil {
12771				var ID string
12772				err = json.Unmarshal(*v, &ID)
12773				if err != nil {
12774					return err
12775				}
12776				ercp.ID = &ID
12777			}
12778		}
12779	}
12780
12781	return nil
12782}
12783
12784// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
12785type ExpressRouteCircuitPeeringConfig struct {
12786	// AdvertisedPublicPrefixes - The reference to AdvertisedPublicPrefixes.
12787	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
12788	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering.
12789	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
12790	// AdvertisedPublicPrefixesState - READ-ONLY; The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
12791	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
12792	// LegacyMode - The legacy mode of the peering.
12793	LegacyMode *int32 `json:"legacyMode,omitempty"`
12794	// CustomerASN - The CustomerASN of the peering.
12795	CustomerASN *int32 `json:"customerASN,omitempty"`
12796	// RoutingRegistryName - The RoutingRegistryName of the configuration.
12797	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
12798}
12799
12800// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
12801type ExpressRouteCircuitPeeringID struct {
12802	// ID - The ID of the ExpressRoute circuit peering.
12803	ID *string `json:"id,omitempty"`
12804}
12805
12806// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
12807// that belong to an ExpressRouteCircuit.
12808type ExpressRouteCircuitPeeringListResult struct {
12809	autorest.Response `json:"-"`
12810	// Value - The peerings in an express route circuit.
12811	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
12812	// NextLink - The URL to get the next set of results.
12813	NextLink *string `json:"nextLink,omitempty"`
12814}
12815
12816// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
12817// ExpressRouteCircuitPeering values.
12818type ExpressRouteCircuitPeeringListResultIterator struct {
12819	i    int
12820	page ExpressRouteCircuitPeeringListResultPage
12821}
12822
12823// NextWithContext advances to the next value.  If there was an error making
12824// the request the iterator does not advance and the error is returned.
12825func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
12826	if tracing.IsEnabled() {
12827		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
12828		defer func() {
12829			sc := -1
12830			if iter.Response().Response.Response != nil {
12831				sc = iter.Response().Response.Response.StatusCode
12832			}
12833			tracing.EndSpan(ctx, sc, err)
12834		}()
12835	}
12836	iter.i++
12837	if iter.i < len(iter.page.Values()) {
12838		return nil
12839	}
12840	err = iter.page.NextWithContext(ctx)
12841	if err != nil {
12842		iter.i--
12843		return err
12844	}
12845	iter.i = 0
12846	return nil
12847}
12848
12849// Next advances to the next value.  If there was an error making
12850// the request the iterator does not advance and the error is returned.
12851// Deprecated: Use NextWithContext() instead.
12852func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
12853	return iter.NextWithContext(context.Background())
12854}
12855
12856// NotDone returns true if the enumeration should be started or is not yet complete.
12857func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
12858	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12859}
12860
12861// Response returns the raw server response from the last page request.
12862func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
12863	return iter.page.Response()
12864}
12865
12866// Value returns the current value or a zero-initialized value if the
12867// iterator has advanced beyond the end of the collection.
12868func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
12869	if !iter.page.NotDone() {
12870		return ExpressRouteCircuitPeering{}
12871	}
12872	return iter.page.Values()[iter.i]
12873}
12874
12875// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
12876func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
12877	return ExpressRouteCircuitPeeringListResultIterator{page: page}
12878}
12879
12880// IsEmpty returns true if the ListResult contains no values.
12881func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
12882	return ercplr.Value == nil || len(*ercplr.Value) == 0
12883}
12884
12885// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
12886// It returns nil if no more results exist.
12887func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
12888	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
12889		return nil, nil
12890	}
12891	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12892		autorest.AsJSON(),
12893		autorest.AsGet(),
12894		autorest.WithBaseURL(to.String(ercplr.NextLink)))
12895}
12896
12897// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
12898type ExpressRouteCircuitPeeringListResultPage struct {
12899	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
12900	ercplr ExpressRouteCircuitPeeringListResult
12901}
12902
12903// NextWithContext advances to the next page of values.  If there was an error making
12904// the request the page does not advance and the error is returned.
12905func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
12906	if tracing.IsEnabled() {
12907		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
12908		defer func() {
12909			sc := -1
12910			if page.Response().Response.Response != nil {
12911				sc = page.Response().Response.Response.StatusCode
12912			}
12913			tracing.EndSpan(ctx, sc, err)
12914		}()
12915	}
12916	next, err := page.fn(ctx, page.ercplr)
12917	if err != nil {
12918		return err
12919	}
12920	page.ercplr = next
12921	return nil
12922}
12923
12924// Next advances to the next page of values.  If there was an error making
12925// the request the page does not advance and the error is returned.
12926// Deprecated: Use NextWithContext() instead.
12927func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
12928	return page.NextWithContext(context.Background())
12929}
12930
12931// NotDone returns true if the page enumeration should be started or is not yet complete.
12932func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
12933	return !page.ercplr.IsEmpty()
12934}
12935
12936// Response returns the raw server response from the last page request.
12937func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
12938	return page.ercplr
12939}
12940
12941// Values returns the slice of values for the current page or nil if there are no values.
12942func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
12943	if page.ercplr.IsEmpty() {
12944		return nil
12945	}
12946	return *page.ercplr.Value
12947}
12948
12949// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
12950func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
12951	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
12952}
12953
12954// ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
12955type ExpressRouteCircuitPeeringPropertiesFormat struct {
12956	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
12957	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
12958	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
12959	State ExpressRoutePeeringState `json:"state,omitempty"`
12960	// AzureASN - The Azure ASN.
12961	AzureASN *int32 `json:"azureASN,omitempty"`
12962	// PeerASN - The peer ASN.
12963	PeerASN *int64 `json:"peerASN,omitempty"`
12964	// PrimaryPeerAddressPrefix - The primary address prefix.
12965	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
12966	// SecondaryPeerAddressPrefix - The secondary address prefix.
12967	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
12968	// PrimaryAzurePort - The primary port.
12969	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12970	// SecondaryAzurePort - The secondary port.
12971	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12972	// SharedKey - The shared key.
12973	SharedKey *string `json:"sharedKey,omitempty"`
12974	// VlanID - The VLAN ID.
12975	VlanID *int32 `json:"vlanId,omitempty"`
12976	// MicrosoftPeeringConfig - The Microsoft peering configuration.
12977	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
12978	// Stats - The peering stats of express route circuit.
12979	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
12980	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12981	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12982	// GatewayManagerEtag - The GatewayManager Etag.
12983	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
12984	// LastModifiedBy - READ-ONLY; Who was the last to modify the peering.
12985	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
12986	// RouteFilter - The reference to the RouteFilter resource.
12987	RouteFilter *SubResource `json:"routeFilter,omitempty"`
12988	// Ipv6PeeringConfig - The IPv6 peering configuration.
12989	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
12990	// ExpressRouteConnection - The ExpressRoute connection.
12991	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
12992	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
12993	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
12994	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
12995	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
12996}
12997
12998// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
12999// of a long-running operation.
13000type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
13001	azure.Future
13002}
13003
13004// Result returns the result of the asynchronous operation.
13005// If the operation has not completed it will return an error.
13006func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
13007	var done bool
13008	done, err = future.DoneWithContext(context.Background(), client)
13009	if err != nil {
13010		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13011		return
13012	}
13013	if !done {
13014		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
13015		return
13016	}
13017	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13018	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
13019		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
13020		if err != nil {
13021			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
13022		}
13023	}
13024	return
13025}
13026
13027// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
13028// long-running operation.
13029type ExpressRouteCircuitPeeringsDeleteFuture struct {
13030	azure.Future
13031}
13032
13033// Result returns the result of the asynchronous operation.
13034// If the operation has not completed it will return an error.
13035func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
13036	var done bool
13037	done, err = future.DoneWithContext(context.Background(), client)
13038	if err != nil {
13039		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
13040		return
13041	}
13042	if !done {
13043		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
13044		return
13045	}
13046	ar.Response = future.Response()
13047	return
13048}
13049
13050// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
13051type ExpressRouteCircuitPropertiesFormat struct {
13052	// AllowClassicOperations - Allow classic operations.
13053	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
13054	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
13055	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
13056	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
13057	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
13058	// Authorizations - The list of authorizations.
13059	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
13060	// Peerings - The list of peerings.
13061	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
13062	// ServiceKey - The ServiceKey.
13063	ServiceKey *string `json:"serviceKey,omitempty"`
13064	// ServiceProviderNotes - The ServiceProviderNotes.
13065	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
13066	// ServiceProviderProperties - The ServiceProviderProperties.
13067	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
13068	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
13069	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
13070	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
13071	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
13072	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
13073	Stag *int32 `json:"stag,omitempty"`
13074	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13075	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13076	// GatewayManagerEtag - The GatewayManager Etag.
13077	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
13078	// GlobalReachEnabled - Flag denoting global reach status.
13079	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
13080}
13081
13082// ExpressRouteCircuitReference reference to an express route circuit.
13083type ExpressRouteCircuitReference struct {
13084	// ID - Corresponding Express Route Circuit Id.
13085	ID *string `json:"id,omitempty"`
13086}
13087
13088// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit.
13089type ExpressRouteCircuitRoutesTable struct {
13090	// NetworkProperty - IP address of a network entity.
13091	NetworkProperty *string `json:"network,omitempty"`
13092	// NextHop - NextHop address.
13093	NextHop *string `json:"nextHop,omitempty"`
13094	// LocPrf - Local preference value as set with the set local-preference route-map configuration command.
13095	LocPrf *string `json:"locPrf,omitempty"`
13096	// Weight - Route Weight.
13097	Weight *int32 `json:"weight,omitempty"`
13098	// Path - Autonomous system paths to the destination network.
13099	Path *string `json:"path,omitempty"`
13100}
13101
13102// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
13103type ExpressRouteCircuitRoutesTableSummary struct {
13104	// Neighbor - IP address of the neighbor.
13105	Neighbor *string `json:"neighbor,omitempty"`
13106	// V - BGP version number spoken to the neighbor.
13107	V *int32 `json:"v,omitempty"`
13108	// As - Autonomous system number.
13109	As *int32 `json:"as,omitempty"`
13110	// UpDown - The length of time that the BGP session has been in the Established state, or the current status if not in the Established state.
13111	UpDown *string `json:"upDown,omitempty"`
13112	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
13113	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
13114}
13115
13116// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
13117// Circuits API.
13118type ExpressRouteCircuitsArpTableListResult struct {
13119	autorest.Response `json:"-"`
13120	// Value - A list of the ARP tables.
13121	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
13122	// NextLink - The URL to get the next set of results.
13123	NextLink *string `json:"nextLink,omitempty"`
13124}
13125
13126// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13127// long-running operation.
13128type ExpressRouteCircuitsCreateOrUpdateFuture struct {
13129	azure.Future
13130}
13131
13132// Result returns the result of the asynchronous operation.
13133// If the operation has not completed it will return an error.
13134func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
13135	var done bool
13136	done, err = future.DoneWithContext(context.Background(), client)
13137	if err != nil {
13138		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13139		return
13140	}
13141	if !done {
13142		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
13143		return
13144	}
13145	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13146	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
13147		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
13148		if err != nil {
13149			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
13150		}
13151	}
13152	return
13153}
13154
13155// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
13156// long-running operation.
13157type ExpressRouteCircuitsDeleteFuture struct {
13158	azure.Future
13159}
13160
13161// Result returns the result of the asynchronous operation.
13162// If the operation has not completed it will return an error.
13163func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
13164	var done bool
13165	done, err = future.DoneWithContext(context.Background(), client)
13166	if err != nil {
13167		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
13168		return
13169	}
13170	if !done {
13171		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
13172		return
13173	}
13174	ar.Response = future.Response()
13175	return
13176}
13177
13178// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
13179// ExpressRouteCircuit.
13180type ExpressRouteCircuitServiceProviderProperties struct {
13181	// ServiceProviderName - The serviceProviderName.
13182	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
13183	// PeeringLocation - The peering location.
13184	PeeringLocation *string `json:"peeringLocation,omitempty"`
13185	// BandwidthInMbps - The BandwidthInMbps.
13186	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
13187}
13188
13189// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
13190type ExpressRouteCircuitSku struct {
13191	// Name - The name of the SKU.
13192	Name *string `json:"name,omitempty"`
13193	// Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
13194	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
13195	// Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData'
13196	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
13197}
13198
13199// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
13200// long-running operation.
13201type ExpressRouteCircuitsListArpTableFuture struct {
13202	azure.Future
13203}
13204
13205// Result returns the result of the asynchronous operation.
13206// If the operation has not completed it will return an error.
13207func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
13208	var done bool
13209	done, err = future.DoneWithContext(context.Background(), client)
13210	if err != nil {
13211		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
13212		return
13213	}
13214	if !done {
13215		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
13216		return
13217	}
13218	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13219	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
13220		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
13221		if err != nil {
13222			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
13223		}
13224	}
13225	return
13226}
13227
13228// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
13229// long-running operation.
13230type ExpressRouteCircuitsListRoutesTableFuture struct {
13231	azure.Future
13232}
13233
13234// Result returns the result of the asynchronous operation.
13235// If the operation has not completed it will return an error.
13236func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
13237	var done bool
13238	done, err = future.DoneWithContext(context.Background(), client)
13239	if err != nil {
13240		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
13241		return
13242	}
13243	if !done {
13244		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
13245		return
13246	}
13247	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13248	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
13249		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
13250		if err != nil {
13251			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
13252		}
13253	}
13254	return
13255}
13256
13257// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
13258// results of a long-running operation.
13259type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
13260	azure.Future
13261}
13262
13263// Result returns the result of the asynchronous operation.
13264// If the operation has not completed it will return an error.
13265func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
13266	var done bool
13267	done, err = future.DoneWithContext(context.Background(), client)
13268	if err != nil {
13269		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
13270		return
13271	}
13272	if !done {
13273		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
13274		return
13275	}
13276	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13277	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
13278		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
13279		if err != nil {
13280			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
13281		}
13282	}
13283	return
13284}
13285
13286// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
13287// Circuits API.
13288type ExpressRouteCircuitsRoutesTableListResult struct {
13289	autorest.Response `json:"-"`
13290	// Value - The list of routes table.
13291	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
13292	// NextLink - The URL to get the next set of results.
13293	NextLink *string `json:"nextLink,omitempty"`
13294}
13295
13296// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
13297// Express Route Circuits API.
13298type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
13299	autorest.Response `json:"-"`
13300	// Value - A list of the routes table.
13301	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
13302	// NextLink - The URL to get the next set of results.
13303	NextLink *string `json:"nextLink,omitempty"`
13304}
13305
13306// ExpressRouteCircuitStats contains stats associated with the peering.
13307type ExpressRouteCircuitStats struct {
13308	autorest.Response `json:"-"`
13309	// PrimarybytesIn - The Primary BytesIn of the peering.
13310	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
13311	// PrimarybytesOut - The primary BytesOut of the peering.
13312	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
13313	// SecondarybytesIn - The secondary BytesIn of the peering.
13314	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
13315	// SecondarybytesOut - The secondary BytesOut of the peering.
13316	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
13317}
13318
13319// ExpressRouteConnection expressRouteConnection resource.
13320type ExpressRouteConnection struct {
13321	autorest.Response `json:"-"`
13322	// ExpressRouteConnectionProperties - Properties of the express route connection.
13323	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
13324	// Name - The name of the resource.
13325	Name *string `json:"name,omitempty"`
13326	// ID - Resource ID.
13327	ID *string `json:"id,omitempty"`
13328}
13329
13330// MarshalJSON is the custom marshaler for ExpressRouteConnection.
13331func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
13332	objectMap := make(map[string]interface{})
13333	if erc.ExpressRouteConnectionProperties != nil {
13334		objectMap["properties"] = erc.ExpressRouteConnectionProperties
13335	}
13336	if erc.Name != nil {
13337		objectMap["name"] = erc.Name
13338	}
13339	if erc.ID != nil {
13340		objectMap["id"] = erc.ID
13341	}
13342	return json.Marshal(objectMap)
13343}
13344
13345// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
13346func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
13347	var m map[string]*json.RawMessage
13348	err := json.Unmarshal(body, &m)
13349	if err != nil {
13350		return err
13351	}
13352	for k, v := range m {
13353		switch k {
13354		case "properties":
13355			if v != nil {
13356				var expressRouteConnectionProperties ExpressRouteConnectionProperties
13357				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
13358				if err != nil {
13359					return err
13360				}
13361				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
13362			}
13363		case "name":
13364			if v != nil {
13365				var name string
13366				err = json.Unmarshal(*v, &name)
13367				if err != nil {
13368					return err
13369				}
13370				erc.Name = &name
13371			}
13372		case "id":
13373			if v != nil {
13374				var ID string
13375				err = json.Unmarshal(*v, &ID)
13376				if err != nil {
13377					return err
13378				}
13379				erc.ID = &ID
13380			}
13381		}
13382	}
13383
13384	return nil
13385}
13386
13387// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
13388type ExpressRouteConnectionID struct {
13389	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
13390	ID *string `json:"id,omitempty"`
13391}
13392
13393// ExpressRouteConnectionList expressRouteConnection list.
13394type ExpressRouteConnectionList struct {
13395	autorest.Response `json:"-"`
13396	// Value - The list of ExpressRoute connections.
13397	Value *[]ExpressRouteConnection `json:"value,omitempty"`
13398}
13399
13400// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
13401type ExpressRouteConnectionProperties struct {
13402	// ProvisioningState - READ-ONLY; The provisioning state of the express route connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13403	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13404	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
13405	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
13406	// AuthorizationKey - Authorization key to establish the connection.
13407	AuthorizationKey *string `json:"authorizationKey,omitempty"`
13408	// RoutingWeight - The routing weight associated to the connection.
13409	RoutingWeight *int32 `json:"routingWeight,omitempty"`
13410	// EnableInternetSecurity - Enable internet security.
13411	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
13412	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
13413	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
13414}
13415
13416// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
13417// a long-running operation.
13418type ExpressRouteConnectionsCreateOrUpdateFuture struct {
13419	azure.Future
13420}
13421
13422// Result returns the result of the asynchronous operation.
13423// If the operation has not completed it will return an error.
13424func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
13425	var done bool
13426	done, err = future.DoneWithContext(context.Background(), client)
13427	if err != nil {
13428		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13429		return
13430	}
13431	if !done {
13432		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
13433		return
13434	}
13435	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13436	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
13437		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
13438		if err != nil {
13439			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
13440		}
13441	}
13442	return
13443}
13444
13445// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
13446// long-running operation.
13447type ExpressRouteConnectionsDeleteFuture struct {
13448	azure.Future
13449}
13450
13451// Result returns the result of the asynchronous operation.
13452// If the operation has not completed it will return an error.
13453func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
13454	var done bool
13455	done, err = future.DoneWithContext(context.Background(), client)
13456	if err != nil {
13457		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
13458		return
13459	}
13460	if !done {
13461		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
13462		return
13463	}
13464	ar.Response = future.Response()
13465	return
13466}
13467
13468// ExpressRouteCrossConnection expressRouteCrossConnection resource.
13469type ExpressRouteCrossConnection struct {
13470	autorest.Response `json:"-"`
13471	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
13472	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
13473	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13474	Etag *string `json:"etag,omitempty"`
13475	// ID - Resource ID.
13476	ID *string `json:"id,omitempty"`
13477	// Name - READ-ONLY; Resource name.
13478	Name *string `json:"name,omitempty"`
13479	// Type - READ-ONLY; Resource type.
13480	Type *string `json:"type,omitempty"`
13481	// Location - Resource location.
13482	Location *string `json:"location,omitempty"`
13483	// Tags - Resource tags.
13484	Tags map[string]*string `json:"tags"`
13485}
13486
13487// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
13488func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
13489	objectMap := make(map[string]interface{})
13490	if ercc.ExpressRouteCrossConnectionProperties != nil {
13491		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
13492	}
13493	if ercc.ID != nil {
13494		objectMap["id"] = ercc.ID
13495	}
13496	if ercc.Location != nil {
13497		objectMap["location"] = ercc.Location
13498	}
13499	if ercc.Tags != nil {
13500		objectMap["tags"] = ercc.Tags
13501	}
13502	return json.Marshal(objectMap)
13503}
13504
13505// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
13506func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
13507	var m map[string]*json.RawMessage
13508	err := json.Unmarshal(body, &m)
13509	if err != nil {
13510		return err
13511	}
13512	for k, v := range m {
13513		switch k {
13514		case "properties":
13515			if v != nil {
13516				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
13517				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
13518				if err != nil {
13519					return err
13520				}
13521				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
13522			}
13523		case "etag":
13524			if v != nil {
13525				var etag string
13526				err = json.Unmarshal(*v, &etag)
13527				if err != nil {
13528					return err
13529				}
13530				ercc.Etag = &etag
13531			}
13532		case "id":
13533			if v != nil {
13534				var ID string
13535				err = json.Unmarshal(*v, &ID)
13536				if err != nil {
13537					return err
13538				}
13539				ercc.ID = &ID
13540			}
13541		case "name":
13542			if v != nil {
13543				var name string
13544				err = json.Unmarshal(*v, &name)
13545				if err != nil {
13546					return err
13547				}
13548				ercc.Name = &name
13549			}
13550		case "type":
13551			if v != nil {
13552				var typeVar string
13553				err = json.Unmarshal(*v, &typeVar)
13554				if err != nil {
13555					return err
13556				}
13557				ercc.Type = &typeVar
13558			}
13559		case "location":
13560			if v != nil {
13561				var location string
13562				err = json.Unmarshal(*v, &location)
13563				if err != nil {
13564					return err
13565				}
13566				ercc.Location = &location
13567			}
13568		case "tags":
13569			if v != nil {
13570				var tags map[string]*string
13571				err = json.Unmarshal(*v, &tags)
13572				if err != nil {
13573					return err
13574				}
13575				ercc.Tags = tags
13576			}
13577		}
13578	}
13579
13580	return nil
13581}
13582
13583// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
13584type ExpressRouteCrossConnectionListResult struct {
13585	autorest.Response `json:"-"`
13586	// Value - A list of ExpressRouteCrossConnection resources.
13587	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
13588	// NextLink - READ-ONLY; The URL to get the next set of results.
13589	NextLink *string `json:"nextLink,omitempty"`
13590}
13591
13592// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
13593// ExpressRouteCrossConnection values.
13594type ExpressRouteCrossConnectionListResultIterator struct {
13595	i    int
13596	page ExpressRouteCrossConnectionListResultPage
13597}
13598
13599// NextWithContext advances to the next value.  If there was an error making
13600// the request the iterator does not advance and the error is returned.
13601func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
13602	if tracing.IsEnabled() {
13603		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
13604		defer func() {
13605			sc := -1
13606			if iter.Response().Response.Response != nil {
13607				sc = iter.Response().Response.Response.StatusCode
13608			}
13609			tracing.EndSpan(ctx, sc, err)
13610		}()
13611	}
13612	iter.i++
13613	if iter.i < len(iter.page.Values()) {
13614		return nil
13615	}
13616	err = iter.page.NextWithContext(ctx)
13617	if err != nil {
13618		iter.i--
13619		return err
13620	}
13621	iter.i = 0
13622	return nil
13623}
13624
13625// Next advances to the next value.  If there was an error making
13626// the request the iterator does not advance and the error is returned.
13627// Deprecated: Use NextWithContext() instead.
13628func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
13629	return iter.NextWithContext(context.Background())
13630}
13631
13632// NotDone returns true if the enumeration should be started or is not yet complete.
13633func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
13634	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13635}
13636
13637// Response returns the raw server response from the last page request.
13638func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
13639	return iter.page.Response()
13640}
13641
13642// Value returns the current value or a zero-initialized value if the
13643// iterator has advanced beyond the end of the collection.
13644func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
13645	if !iter.page.NotDone() {
13646		return ExpressRouteCrossConnection{}
13647	}
13648	return iter.page.Values()[iter.i]
13649}
13650
13651// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
13652func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
13653	return ExpressRouteCrossConnectionListResultIterator{page: page}
13654}
13655
13656// IsEmpty returns true if the ListResult contains no values.
13657func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
13658	return ercclr.Value == nil || len(*ercclr.Value) == 0
13659}
13660
13661// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
13662// It returns nil if no more results exist.
13663func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
13664	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
13665		return nil, nil
13666	}
13667	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13668		autorest.AsJSON(),
13669		autorest.AsGet(),
13670		autorest.WithBaseURL(to.String(ercclr.NextLink)))
13671}
13672
13673// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
13674type ExpressRouteCrossConnectionListResultPage struct {
13675	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
13676	ercclr ExpressRouteCrossConnectionListResult
13677}
13678
13679// NextWithContext advances to the next page of values.  If there was an error making
13680// the request the page does not advance and the error is returned.
13681func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
13682	if tracing.IsEnabled() {
13683		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
13684		defer func() {
13685			sc := -1
13686			if page.Response().Response.Response != nil {
13687				sc = page.Response().Response.Response.StatusCode
13688			}
13689			tracing.EndSpan(ctx, sc, err)
13690		}()
13691	}
13692	next, err := page.fn(ctx, page.ercclr)
13693	if err != nil {
13694		return err
13695	}
13696	page.ercclr = next
13697	return nil
13698}
13699
13700// Next advances to the next page of values.  If there was an error making
13701// the request the page does not advance and the error is returned.
13702// Deprecated: Use NextWithContext() instead.
13703func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
13704	return page.NextWithContext(context.Background())
13705}
13706
13707// NotDone returns true if the page enumeration should be started or is not yet complete.
13708func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
13709	return !page.ercclr.IsEmpty()
13710}
13711
13712// Response returns the raw server response from the last page request.
13713func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
13714	return page.ercclr
13715}
13716
13717// Values returns the slice of values for the current page or nil if there are no values.
13718func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
13719	if page.ercclr.IsEmpty() {
13720		return nil
13721	}
13722	return *page.ercclr.Value
13723}
13724
13725// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
13726func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
13727	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
13728}
13729
13730// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
13731type ExpressRouteCrossConnectionPeering struct {
13732	autorest.Response `json:"-"`
13733	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
13734	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
13735	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13736	Name *string `json:"name,omitempty"`
13737	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13738	Etag *string `json:"etag,omitempty"`
13739	// ID - Resource ID.
13740	ID *string `json:"id,omitempty"`
13741}
13742
13743// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
13744func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
13745	objectMap := make(map[string]interface{})
13746	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
13747		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
13748	}
13749	if erccp.Name != nil {
13750		objectMap["name"] = erccp.Name
13751	}
13752	if erccp.ID != nil {
13753		objectMap["id"] = erccp.ID
13754	}
13755	return json.Marshal(objectMap)
13756}
13757
13758// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
13759func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
13760	var m map[string]*json.RawMessage
13761	err := json.Unmarshal(body, &m)
13762	if err != nil {
13763		return err
13764	}
13765	for k, v := range m {
13766		switch k {
13767		case "properties":
13768			if v != nil {
13769				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
13770				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
13771				if err != nil {
13772					return err
13773				}
13774				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
13775			}
13776		case "name":
13777			if v != nil {
13778				var name string
13779				err = json.Unmarshal(*v, &name)
13780				if err != nil {
13781					return err
13782				}
13783				erccp.Name = &name
13784			}
13785		case "etag":
13786			if v != nil {
13787				var etag string
13788				err = json.Unmarshal(*v, &etag)
13789				if err != nil {
13790					return err
13791				}
13792				erccp.Etag = &etag
13793			}
13794		case "id":
13795			if v != nil {
13796				var ID string
13797				err = json.Unmarshal(*v, &ID)
13798				if err != nil {
13799					return err
13800				}
13801				erccp.ID = &ID
13802			}
13803		}
13804	}
13805
13806	return nil
13807}
13808
13809// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
13810// that belong to an ExpressRouteCrossConnection.
13811type ExpressRouteCrossConnectionPeeringList struct {
13812	autorest.Response `json:"-"`
13813	// Value - The peerings in an express route cross connection.
13814	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
13815	// NextLink - READ-ONLY; The URL to get the next set of results.
13816	NextLink *string `json:"nextLink,omitempty"`
13817}
13818
13819// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
13820// ExpressRouteCrossConnectionPeering values.
13821type ExpressRouteCrossConnectionPeeringListIterator struct {
13822	i    int
13823	page ExpressRouteCrossConnectionPeeringListPage
13824}
13825
13826// NextWithContext advances to the next value.  If there was an error making
13827// the request the iterator does not advance and the error is returned.
13828func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
13829	if tracing.IsEnabled() {
13830		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
13831		defer func() {
13832			sc := -1
13833			if iter.Response().Response.Response != nil {
13834				sc = iter.Response().Response.Response.StatusCode
13835			}
13836			tracing.EndSpan(ctx, sc, err)
13837		}()
13838	}
13839	iter.i++
13840	if iter.i < len(iter.page.Values()) {
13841		return nil
13842	}
13843	err = iter.page.NextWithContext(ctx)
13844	if err != nil {
13845		iter.i--
13846		return err
13847	}
13848	iter.i = 0
13849	return nil
13850}
13851
13852// Next advances to the next value.  If there was an error making
13853// the request the iterator does not advance and the error is returned.
13854// Deprecated: Use NextWithContext() instead.
13855func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
13856	return iter.NextWithContext(context.Background())
13857}
13858
13859// NotDone returns true if the enumeration should be started or is not yet complete.
13860func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
13861	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13862}
13863
13864// Response returns the raw server response from the last page request.
13865func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
13866	return iter.page.Response()
13867}
13868
13869// Value returns the current value or a zero-initialized value if the
13870// iterator has advanced beyond the end of the collection.
13871func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
13872	if !iter.page.NotDone() {
13873		return ExpressRouteCrossConnectionPeering{}
13874	}
13875	return iter.page.Values()[iter.i]
13876}
13877
13878// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
13879func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
13880	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
13881}
13882
13883// IsEmpty returns true if the ListResult contains no values.
13884func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
13885	return erccpl.Value == nil || len(*erccpl.Value) == 0
13886}
13887
13888// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
13889// It returns nil if no more results exist.
13890func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
13891	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
13892		return nil, nil
13893	}
13894	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13895		autorest.AsJSON(),
13896		autorest.AsGet(),
13897		autorest.WithBaseURL(to.String(erccpl.NextLink)))
13898}
13899
13900// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
13901type ExpressRouteCrossConnectionPeeringListPage struct {
13902	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
13903	erccpl ExpressRouteCrossConnectionPeeringList
13904}
13905
13906// NextWithContext advances to the next page of values.  If there was an error making
13907// the request the page does not advance and the error is returned.
13908func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
13909	if tracing.IsEnabled() {
13910		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
13911		defer func() {
13912			sc := -1
13913			if page.Response().Response.Response != nil {
13914				sc = page.Response().Response.Response.StatusCode
13915			}
13916			tracing.EndSpan(ctx, sc, err)
13917		}()
13918	}
13919	next, err := page.fn(ctx, page.erccpl)
13920	if err != nil {
13921		return err
13922	}
13923	page.erccpl = next
13924	return nil
13925}
13926
13927// Next advances to the next page of values.  If there was an error making
13928// the request the page does not advance and the error is returned.
13929// Deprecated: Use NextWithContext() instead.
13930func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
13931	return page.NextWithContext(context.Background())
13932}
13933
13934// NotDone returns true if the page enumeration should be started or is not yet complete.
13935func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
13936	return !page.erccpl.IsEmpty()
13937}
13938
13939// Response returns the raw server response from the last page request.
13940func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
13941	return page.erccpl
13942}
13943
13944// Values returns the slice of values for the current page or nil if there are no values.
13945func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
13946	if page.erccpl.IsEmpty() {
13947		return nil
13948	}
13949	return *page.erccpl.Value
13950}
13951
13952// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
13953func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
13954	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
13955}
13956
13957// ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
13958type ExpressRouteCrossConnectionPeeringProperties struct {
13959	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
13960	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
13961	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
13962	State ExpressRoutePeeringState `json:"state,omitempty"`
13963	// AzureASN - READ-ONLY; The Azure ASN.
13964	AzureASN *int32 `json:"azureASN,omitempty"`
13965	// PeerASN - The peer ASN.
13966	PeerASN *int64 `json:"peerASN,omitempty"`
13967	// PrimaryPeerAddressPrefix - The primary address prefix.
13968	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
13969	// SecondaryPeerAddressPrefix - The secondary address prefix.
13970	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
13971	// PrimaryAzurePort - READ-ONLY; The primary port.
13972	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
13973	// SecondaryAzurePort - READ-ONLY; The secondary port.
13974	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
13975	// SharedKey - The shared key.
13976	SharedKey *string `json:"sharedKey,omitempty"`
13977	// VlanID - The VLAN ID.
13978	VlanID *int32 `json:"vlanId,omitempty"`
13979	// MicrosoftPeeringConfig - The Microsoft peering configuration.
13980	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
13981	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13982	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13983	// GatewayManagerEtag - The GatewayManager Etag.
13984	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
13985	// LastModifiedBy - READ-ONLY; Who was the last to modify the peering.
13986	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
13987	// Ipv6PeeringConfig - The IPv6 peering configuration.
13988	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
13989}
13990
13991// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
13992// results of a long-running operation.
13993type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
13994	azure.Future
13995}
13996
13997// Result returns the result of the asynchronous operation.
13998// If the operation has not completed it will return an error.
13999func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
14000	var done bool
14001	done, err = future.DoneWithContext(context.Background(), client)
14002	if err != nil {
14003		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14004		return
14005	}
14006	if !done {
14007		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
14008		return
14009	}
14010	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14011	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
14012		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
14013		if err != nil {
14014			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
14015		}
14016	}
14017	return
14018}
14019
14020// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
14021// of a long-running operation.
14022type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
14023	azure.Future
14024}
14025
14026// Result returns the result of the asynchronous operation.
14027// If the operation has not completed it will return an error.
14028func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
14029	var done bool
14030	done, err = future.DoneWithContext(context.Background(), client)
14031	if err != nil {
14032		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
14033		return
14034	}
14035	if !done {
14036		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
14037		return
14038	}
14039	ar.Response = future.Response()
14040	return
14041}
14042
14043// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
14044type ExpressRouteCrossConnectionProperties struct {
14045	// PrimaryAzurePort - READ-ONLY; The name of the primary port.
14046	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
14047	// SecondaryAzurePort - READ-ONLY; The name of the secondary port.
14048	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
14049	// STag - READ-ONLY; The identifier of the circuit traffic.
14050	STag *int32 `json:"sTag,omitempty"`
14051	// PeeringLocation - The peering location of the ExpressRoute circuit.
14052	PeeringLocation *string `json:"peeringLocation,omitempty"`
14053	// BandwidthInMbps - The circuit bandwidth In Mbps.
14054	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
14055	// ExpressRouteCircuit - The ExpressRouteCircuit.
14056	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
14057	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
14058	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
14059	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
14060	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
14061	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14062	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14063	// Peerings - The list of peerings.
14064	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
14065}
14066
14067// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
14068type ExpressRouteCrossConnectionRoutesTableSummary struct {
14069	// Neighbor - IP address of Neighbor router.
14070	Neighbor *string `json:"neighbor,omitempty"`
14071	// Asn - Autonomous system number.
14072	Asn *int32 `json:"asn,omitempty"`
14073	// UpDown - The length of time that the BGP session has been in the Established state, or the current status if not in the Established state.
14074	UpDown *string `json:"upDown,omitempty"`
14075	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
14076	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
14077}
14078
14079// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
14080// results of a long-running operation.
14081type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
14082	azure.Future
14083}
14084
14085// Result returns the result of the asynchronous operation.
14086// If the operation has not completed it will return an error.
14087func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
14088	var done bool
14089	done, err = future.DoneWithContext(context.Background(), client)
14090	if err != nil {
14091		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14092		return
14093	}
14094	if !done {
14095		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
14096		return
14097	}
14098	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14099	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
14100		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
14101		if err != nil {
14102			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
14103		}
14104	}
14105	return
14106}
14107
14108// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
14109// of a long-running operation.
14110type ExpressRouteCrossConnectionsListArpTableFuture struct {
14111	azure.Future
14112}
14113
14114// Result returns the result of the asynchronous operation.
14115// If the operation has not completed it will return an error.
14116func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
14117	var done bool
14118	done, err = future.DoneWithContext(context.Background(), client)
14119	if err != nil {
14120		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
14121		return
14122	}
14123	if !done {
14124		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
14125		return
14126	}
14127	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14128	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
14129		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
14130		if err != nil {
14131			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
14132		}
14133	}
14134	return
14135}
14136
14137// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
14138// results of a long-running operation.
14139type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
14140	azure.Future
14141}
14142
14143// Result returns the result of the asynchronous operation.
14144// If the operation has not completed it will return an error.
14145func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
14146	var done bool
14147	done, err = future.DoneWithContext(context.Background(), client)
14148	if err != nil {
14149		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
14150		return
14151	}
14152	if !done {
14153		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
14154		return
14155	}
14156	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14157	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
14158		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
14159		if err != nil {
14160			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
14161		}
14162	}
14163	return
14164}
14165
14166// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
14167// the results of a long-running operation.
14168type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
14169	azure.Future
14170}
14171
14172// Result returns the result of the asynchronous operation.
14173// If the operation has not completed it will return an error.
14174func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
14175	var done bool
14176	done, err = future.DoneWithContext(context.Background(), client)
14177	if err != nil {
14178		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
14179		return
14180	}
14181	if !done {
14182		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
14183		return
14184	}
14185	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14186	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
14187		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
14188		if err != nil {
14189			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
14190		}
14191	}
14192	return
14193}
14194
14195// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
14196// the Express Route Cross Connections.
14197type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
14198	autorest.Response `json:"-"`
14199	// Value - A list of the routes table.
14200	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
14201	// NextLink - READ-ONLY; The URL to get the next set of results.
14202	NextLink *string `json:"nextLink,omitempty"`
14203}
14204
14205// ExpressRouteGateway expressRoute gateway resource.
14206type ExpressRouteGateway struct {
14207	autorest.Response `json:"-"`
14208	// ExpressRouteGatewayProperties - Properties of the express route gateway.
14209	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
14210	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
14211	Etag *string `json:"etag,omitempty"`
14212	// ID - Resource ID.
14213	ID *string `json:"id,omitempty"`
14214	// Name - READ-ONLY; Resource name.
14215	Name *string `json:"name,omitempty"`
14216	// Type - READ-ONLY; Resource type.
14217	Type *string `json:"type,omitempty"`
14218	// Location - Resource location.
14219	Location *string `json:"location,omitempty"`
14220	// Tags - Resource tags.
14221	Tags map[string]*string `json:"tags"`
14222}
14223
14224// MarshalJSON is the custom marshaler for ExpressRouteGateway.
14225func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
14226	objectMap := make(map[string]interface{})
14227	if erg.ExpressRouteGatewayProperties != nil {
14228		objectMap["properties"] = erg.ExpressRouteGatewayProperties
14229	}
14230	if erg.ID != nil {
14231		objectMap["id"] = erg.ID
14232	}
14233	if erg.Location != nil {
14234		objectMap["location"] = erg.Location
14235	}
14236	if erg.Tags != nil {
14237		objectMap["tags"] = erg.Tags
14238	}
14239	return json.Marshal(objectMap)
14240}
14241
14242// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
14243func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
14244	var m map[string]*json.RawMessage
14245	err := json.Unmarshal(body, &m)
14246	if err != nil {
14247		return err
14248	}
14249	for k, v := range m {
14250		switch k {
14251		case "properties":
14252			if v != nil {
14253				var expressRouteGatewayProperties ExpressRouteGatewayProperties
14254				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
14255				if err != nil {
14256					return err
14257				}
14258				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
14259			}
14260		case "etag":
14261			if v != nil {
14262				var etag string
14263				err = json.Unmarshal(*v, &etag)
14264				if err != nil {
14265					return err
14266				}
14267				erg.Etag = &etag
14268			}
14269		case "id":
14270			if v != nil {
14271				var ID string
14272				err = json.Unmarshal(*v, &ID)
14273				if err != nil {
14274					return err
14275				}
14276				erg.ID = &ID
14277			}
14278		case "name":
14279			if v != nil {
14280				var name string
14281				err = json.Unmarshal(*v, &name)
14282				if err != nil {
14283					return err
14284				}
14285				erg.Name = &name
14286			}
14287		case "type":
14288			if v != nil {
14289				var typeVar string
14290				err = json.Unmarshal(*v, &typeVar)
14291				if err != nil {
14292					return err
14293				}
14294				erg.Type = &typeVar
14295			}
14296		case "location":
14297			if v != nil {
14298				var location string
14299				err = json.Unmarshal(*v, &location)
14300				if err != nil {
14301					return err
14302				}
14303				erg.Location = &location
14304			}
14305		case "tags":
14306			if v != nil {
14307				var tags map[string]*string
14308				err = json.Unmarshal(*v, &tags)
14309				if err != nil {
14310					return err
14311				}
14312				erg.Tags = tags
14313			}
14314		}
14315	}
14316
14317	return nil
14318}
14319
14320// ExpressRouteGatewayList list of ExpressRoute gateways.
14321type ExpressRouteGatewayList struct {
14322	autorest.Response `json:"-"`
14323	// Value - List of ExpressRoute gateways.
14324	Value *[]ExpressRouteGateway `json:"value,omitempty"`
14325}
14326
14327// ExpressRouteGatewayProperties expressRoute gateway resource properties.
14328type ExpressRouteGatewayProperties struct {
14329	// AutoScaleConfiguration - Configuration for auto scaling.
14330	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
14331	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
14332	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
14333	// ProvisioningState - READ-ONLY; The provisioning state of the express route gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14334	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14335	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
14336	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
14337}
14338
14339// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
14340type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
14341	// Bounds - Minimum and maximum number of scale units to deploy.
14342	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
14343}
14344
14345// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
14346// deploy.
14347type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
14348	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
14349	Min *int32 `json:"min,omitempty"`
14350	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
14351	Max *int32 `json:"max,omitempty"`
14352}
14353
14354// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14355// long-running operation.
14356type ExpressRouteGatewaysCreateOrUpdateFuture struct {
14357	azure.Future
14358}
14359
14360// Result returns the result of the asynchronous operation.
14361// If the operation has not completed it will return an error.
14362func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
14363	var done bool
14364	done, err = future.DoneWithContext(context.Background(), client)
14365	if err != nil {
14366		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14367		return
14368	}
14369	if !done {
14370		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
14371		return
14372	}
14373	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14374	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
14375		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
14376		if err != nil {
14377			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
14378		}
14379	}
14380	return
14381}
14382
14383// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
14384// long-running operation.
14385type ExpressRouteGatewaysDeleteFuture struct {
14386	azure.Future
14387}
14388
14389// Result returns the result of the asynchronous operation.
14390// If the operation has not completed it will return an error.
14391func (future *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
14392	var done bool
14393	done, err = future.DoneWithContext(context.Background(), client)
14394	if err != nil {
14395		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
14396		return
14397	}
14398	if !done {
14399		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
14400		return
14401	}
14402	ar.Response = future.Response()
14403	return
14404}
14405
14406// ExpressRouteLink expressRouteLink child resource definition.
14407type ExpressRouteLink struct {
14408	autorest.Response `json:"-"`
14409	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties.
14410	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
14411	// Name - Name of child port resource that is unique among child port resources of the parent.
14412	Name *string `json:"name,omitempty"`
14413	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
14414	Etag *string `json:"etag,omitempty"`
14415	// ID - Resource ID.
14416	ID *string `json:"id,omitempty"`
14417}
14418
14419// MarshalJSON is the custom marshaler for ExpressRouteLink.
14420func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
14421	objectMap := make(map[string]interface{})
14422	if erl.ExpressRouteLinkPropertiesFormat != nil {
14423		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
14424	}
14425	if erl.Name != nil {
14426		objectMap["name"] = erl.Name
14427	}
14428	if erl.ID != nil {
14429		objectMap["id"] = erl.ID
14430	}
14431	return json.Marshal(objectMap)
14432}
14433
14434// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
14435func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
14436	var m map[string]*json.RawMessage
14437	err := json.Unmarshal(body, &m)
14438	if err != nil {
14439		return err
14440	}
14441	for k, v := range m {
14442		switch k {
14443		case "properties":
14444			if v != nil {
14445				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
14446				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
14447				if err != nil {
14448					return err
14449				}
14450				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
14451			}
14452		case "name":
14453			if v != nil {
14454				var name string
14455				err = json.Unmarshal(*v, &name)
14456				if err != nil {
14457					return err
14458				}
14459				erl.Name = &name
14460			}
14461		case "etag":
14462			if v != nil {
14463				var etag string
14464				err = json.Unmarshal(*v, &etag)
14465				if err != nil {
14466					return err
14467				}
14468				erl.Etag = &etag
14469			}
14470		case "id":
14471			if v != nil {
14472				var ID string
14473				err = json.Unmarshal(*v, &ID)
14474				if err != nil {
14475					return err
14476				}
14477				erl.ID = &ID
14478			}
14479		}
14480	}
14481
14482	return nil
14483}
14484
14485// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
14486type ExpressRouteLinkListResult struct {
14487	autorest.Response `json:"-"`
14488	// Value - The list of ExpressRouteLink sub-resources.
14489	Value *[]ExpressRouteLink `json:"value,omitempty"`
14490	// NextLink - The URL to get the next set of results.
14491	NextLink *string `json:"nextLink,omitempty"`
14492}
14493
14494// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
14495type ExpressRouteLinkListResultIterator struct {
14496	i    int
14497	page ExpressRouteLinkListResultPage
14498}
14499
14500// NextWithContext advances to the next value.  If there was an error making
14501// the request the iterator does not advance and the error is returned.
14502func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
14503	if tracing.IsEnabled() {
14504		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
14505		defer func() {
14506			sc := -1
14507			if iter.Response().Response.Response != nil {
14508				sc = iter.Response().Response.Response.StatusCode
14509			}
14510			tracing.EndSpan(ctx, sc, err)
14511		}()
14512	}
14513	iter.i++
14514	if iter.i < len(iter.page.Values()) {
14515		return nil
14516	}
14517	err = iter.page.NextWithContext(ctx)
14518	if err != nil {
14519		iter.i--
14520		return err
14521	}
14522	iter.i = 0
14523	return nil
14524}
14525
14526// Next advances to the next value.  If there was an error making
14527// the request the iterator does not advance and the error is returned.
14528// Deprecated: Use NextWithContext() instead.
14529func (iter *ExpressRouteLinkListResultIterator) Next() error {
14530	return iter.NextWithContext(context.Background())
14531}
14532
14533// NotDone returns true if the enumeration should be started or is not yet complete.
14534func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
14535	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14536}
14537
14538// Response returns the raw server response from the last page request.
14539func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
14540	return iter.page.Response()
14541}
14542
14543// Value returns the current value or a zero-initialized value if the
14544// iterator has advanced beyond the end of the collection.
14545func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
14546	if !iter.page.NotDone() {
14547		return ExpressRouteLink{}
14548	}
14549	return iter.page.Values()[iter.i]
14550}
14551
14552// Creates a new instance of the ExpressRouteLinkListResultIterator type.
14553func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
14554	return ExpressRouteLinkListResultIterator{page: page}
14555}
14556
14557// IsEmpty returns true if the ListResult contains no values.
14558func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
14559	return erllr.Value == nil || len(*erllr.Value) == 0
14560}
14561
14562// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
14563// It returns nil if no more results exist.
14564func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
14565	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
14566		return nil, nil
14567	}
14568	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14569		autorest.AsJSON(),
14570		autorest.AsGet(),
14571		autorest.WithBaseURL(to.String(erllr.NextLink)))
14572}
14573
14574// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
14575type ExpressRouteLinkListResultPage struct {
14576	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
14577	erllr ExpressRouteLinkListResult
14578}
14579
14580// NextWithContext advances to the next page of values.  If there was an error making
14581// the request the page does not advance and the error is returned.
14582func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
14583	if tracing.IsEnabled() {
14584		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
14585		defer func() {
14586			sc := -1
14587			if page.Response().Response.Response != nil {
14588				sc = page.Response().Response.Response.StatusCode
14589			}
14590			tracing.EndSpan(ctx, sc, err)
14591		}()
14592	}
14593	next, err := page.fn(ctx, page.erllr)
14594	if err != nil {
14595		return err
14596	}
14597	page.erllr = next
14598	return nil
14599}
14600
14601// Next advances to the next page of values.  If there was an error making
14602// the request the page does not advance and the error is returned.
14603// Deprecated: Use NextWithContext() instead.
14604func (page *ExpressRouteLinkListResultPage) Next() error {
14605	return page.NextWithContext(context.Background())
14606}
14607
14608// NotDone returns true if the page enumeration should be started or is not yet complete.
14609func (page ExpressRouteLinkListResultPage) NotDone() bool {
14610	return !page.erllr.IsEmpty()
14611}
14612
14613// Response returns the raw server response from the last page request.
14614func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
14615	return page.erllr
14616}
14617
14618// Values returns the slice of values for the current page or nil if there are no values.
14619func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
14620	if page.erllr.IsEmpty() {
14621		return nil
14622	}
14623	return *page.erllr.Value
14624}
14625
14626// Creates a new instance of the ExpressRouteLinkListResultPage type.
14627func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
14628	return ExpressRouteLinkListResultPage{fn: getNextPage}
14629}
14630
14631// ExpressRouteLinkMacSecConfig expressRouteLink Mac Security Configuration.
14632type ExpressRouteLinkMacSecConfig struct {
14633	// CknSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CKN key.
14634	CknSecretIdentifier *string `json:"cknSecretIdentifier,omitempty"`
14635	// CakSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CAK key.
14636	CakSecretIdentifier *string `json:"cakSecretIdentifier,omitempty"`
14637	// Cipher - Mac security cipher. Possible values include: 'GcmAes128', 'GcmAes256'
14638	Cipher ExpressRouteLinkMacSecCipher `json:"cipher,omitempty"`
14639}
14640
14641// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
14642type ExpressRouteLinkPropertiesFormat struct {
14643	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
14644	RouterName *string `json:"routerName,omitempty"`
14645	// InterfaceName - READ-ONLY; Name of Azure router interface.
14646	InterfaceName *string `json:"interfaceName,omitempty"`
14647	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
14648	PatchPanelID *string `json:"patchPanelId,omitempty"`
14649	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
14650	RackID *string `json:"rackId,omitempty"`
14651	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
14652	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
14653	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
14654	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
14655	// ProvisioningState - READ-ONLY; The provisioning state of the express route link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14656	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14657	// MacSecConfig - MacSec configuration.
14658	MacSecConfig *ExpressRouteLinkMacSecConfig `json:"macSecConfig,omitempty"`
14659}
14660
14661// ExpressRoutePort expressRoutePort resource definition.
14662type ExpressRoutePort struct {
14663	autorest.Response `json:"-"`
14664	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties.
14665	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
14666	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
14667	Etag *string `json:"etag,omitempty"`
14668	// Identity - The identity of ExpressRoutePort, if configured.
14669	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
14670	// ID - Resource ID.
14671	ID *string `json:"id,omitempty"`
14672	// Name - READ-ONLY; Resource name.
14673	Name *string `json:"name,omitempty"`
14674	// Type - READ-ONLY; Resource type.
14675	Type *string `json:"type,omitempty"`
14676	// Location - Resource location.
14677	Location *string `json:"location,omitempty"`
14678	// Tags - Resource tags.
14679	Tags map[string]*string `json:"tags"`
14680}
14681
14682// MarshalJSON is the custom marshaler for ExpressRoutePort.
14683func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
14684	objectMap := make(map[string]interface{})
14685	if erp.ExpressRoutePortPropertiesFormat != nil {
14686		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
14687	}
14688	if erp.Identity != nil {
14689		objectMap["identity"] = erp.Identity
14690	}
14691	if erp.ID != nil {
14692		objectMap["id"] = erp.ID
14693	}
14694	if erp.Location != nil {
14695		objectMap["location"] = erp.Location
14696	}
14697	if erp.Tags != nil {
14698		objectMap["tags"] = erp.Tags
14699	}
14700	return json.Marshal(objectMap)
14701}
14702
14703// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
14704func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
14705	var m map[string]*json.RawMessage
14706	err := json.Unmarshal(body, &m)
14707	if err != nil {
14708		return err
14709	}
14710	for k, v := range m {
14711		switch k {
14712		case "properties":
14713			if v != nil {
14714				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
14715				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
14716				if err != nil {
14717					return err
14718				}
14719				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
14720			}
14721		case "etag":
14722			if v != nil {
14723				var etag string
14724				err = json.Unmarshal(*v, &etag)
14725				if err != nil {
14726					return err
14727				}
14728				erp.Etag = &etag
14729			}
14730		case "identity":
14731			if v != nil {
14732				var identity ManagedServiceIdentity
14733				err = json.Unmarshal(*v, &identity)
14734				if err != nil {
14735					return err
14736				}
14737				erp.Identity = &identity
14738			}
14739		case "id":
14740			if v != nil {
14741				var ID string
14742				err = json.Unmarshal(*v, &ID)
14743				if err != nil {
14744					return err
14745				}
14746				erp.ID = &ID
14747			}
14748		case "name":
14749			if v != nil {
14750				var name string
14751				err = json.Unmarshal(*v, &name)
14752				if err != nil {
14753					return err
14754				}
14755				erp.Name = &name
14756			}
14757		case "type":
14758			if v != nil {
14759				var typeVar string
14760				err = json.Unmarshal(*v, &typeVar)
14761				if err != nil {
14762					return err
14763				}
14764				erp.Type = &typeVar
14765			}
14766		case "location":
14767			if v != nil {
14768				var location string
14769				err = json.Unmarshal(*v, &location)
14770				if err != nil {
14771					return err
14772				}
14773				erp.Location = &location
14774			}
14775		case "tags":
14776			if v != nil {
14777				var tags map[string]*string
14778				err = json.Unmarshal(*v, &tags)
14779				if err != nil {
14780					return err
14781				}
14782				erp.Tags = tags
14783			}
14784		}
14785	}
14786
14787	return nil
14788}
14789
14790// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
14791type ExpressRoutePortListResult struct {
14792	autorest.Response `json:"-"`
14793	// Value - A list of ExpressRoutePort resources.
14794	Value *[]ExpressRoutePort `json:"value,omitempty"`
14795	// NextLink - The URL to get the next set of results.
14796	NextLink *string `json:"nextLink,omitempty"`
14797}
14798
14799// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
14800type ExpressRoutePortListResultIterator struct {
14801	i    int
14802	page ExpressRoutePortListResultPage
14803}
14804
14805// NextWithContext advances to the next value.  If there was an error making
14806// the request the iterator does not advance and the error is returned.
14807func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
14808	if tracing.IsEnabled() {
14809		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
14810		defer func() {
14811			sc := -1
14812			if iter.Response().Response.Response != nil {
14813				sc = iter.Response().Response.Response.StatusCode
14814			}
14815			tracing.EndSpan(ctx, sc, err)
14816		}()
14817	}
14818	iter.i++
14819	if iter.i < len(iter.page.Values()) {
14820		return nil
14821	}
14822	err = iter.page.NextWithContext(ctx)
14823	if err != nil {
14824		iter.i--
14825		return err
14826	}
14827	iter.i = 0
14828	return nil
14829}
14830
14831// Next advances to the next value.  If there was an error making
14832// the request the iterator does not advance and the error is returned.
14833// Deprecated: Use NextWithContext() instead.
14834func (iter *ExpressRoutePortListResultIterator) Next() error {
14835	return iter.NextWithContext(context.Background())
14836}
14837
14838// NotDone returns true if the enumeration should be started or is not yet complete.
14839func (iter ExpressRoutePortListResultIterator) NotDone() bool {
14840	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14841}
14842
14843// Response returns the raw server response from the last page request.
14844func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
14845	return iter.page.Response()
14846}
14847
14848// Value returns the current value or a zero-initialized value if the
14849// iterator has advanced beyond the end of the collection.
14850func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
14851	if !iter.page.NotDone() {
14852		return ExpressRoutePort{}
14853	}
14854	return iter.page.Values()[iter.i]
14855}
14856
14857// Creates a new instance of the ExpressRoutePortListResultIterator type.
14858func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
14859	return ExpressRoutePortListResultIterator{page: page}
14860}
14861
14862// IsEmpty returns true if the ListResult contains no values.
14863func (erplr ExpressRoutePortListResult) IsEmpty() bool {
14864	return erplr.Value == nil || len(*erplr.Value) == 0
14865}
14866
14867// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
14868// It returns nil if no more results exist.
14869func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
14870	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
14871		return nil, nil
14872	}
14873	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14874		autorest.AsJSON(),
14875		autorest.AsGet(),
14876		autorest.WithBaseURL(to.String(erplr.NextLink)))
14877}
14878
14879// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
14880type ExpressRoutePortListResultPage struct {
14881	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
14882	erplr ExpressRoutePortListResult
14883}
14884
14885// NextWithContext advances to the next page of values.  If there was an error making
14886// the request the page does not advance and the error is returned.
14887func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
14888	if tracing.IsEnabled() {
14889		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
14890		defer func() {
14891			sc := -1
14892			if page.Response().Response.Response != nil {
14893				sc = page.Response().Response.Response.StatusCode
14894			}
14895			tracing.EndSpan(ctx, sc, err)
14896		}()
14897	}
14898	next, err := page.fn(ctx, page.erplr)
14899	if err != nil {
14900		return err
14901	}
14902	page.erplr = next
14903	return nil
14904}
14905
14906// Next advances to the next page of values.  If there was an error making
14907// the request the page does not advance and the error is returned.
14908// Deprecated: Use NextWithContext() instead.
14909func (page *ExpressRoutePortListResultPage) Next() error {
14910	return page.NextWithContext(context.Background())
14911}
14912
14913// NotDone returns true if the page enumeration should be started or is not yet complete.
14914func (page ExpressRoutePortListResultPage) NotDone() bool {
14915	return !page.erplr.IsEmpty()
14916}
14917
14918// Response returns the raw server response from the last page request.
14919func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
14920	return page.erplr
14921}
14922
14923// Values returns the slice of values for the current page or nil if there are no values.
14924func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
14925	if page.erplr.IsEmpty() {
14926		return nil
14927	}
14928	return *page.erplr.Value
14929}
14930
14931// Creates a new instance of the ExpressRoutePortListResultPage type.
14932func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
14933	return ExpressRoutePortListResultPage{fn: getNextPage}
14934}
14935
14936// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
14937type ExpressRoutePortPropertiesFormat struct {
14938	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
14939	PeeringLocation *string `json:"peeringLocation,omitempty"`
14940	// BandwidthInGbps - Bandwidth of procured ports in Gbps.
14941	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
14942	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
14943	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
14944	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s).
14945	Mtu *string `json:"mtu,omitempty"`
14946	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
14947	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
14948	// EtherType - READ-ONLY; Ether type of the physical port.
14949	EtherType *string `json:"etherType,omitempty"`
14950	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
14951	AllocationDate *string `json:"allocationDate,omitempty"`
14952	// Links - The set of physical links of the ExpressRoutePort resource.
14953	Links *[]ExpressRouteLink `json:"links,omitempty"`
14954	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
14955	Circuits *[]SubResource `json:"circuits,omitempty"`
14956	// ProvisioningState - READ-ONLY; The provisioning state of the express route port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14957	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14958	// ResourceGUID - READ-ONLY; The resource GUID property of the express route port resource.
14959	ResourceGUID *string `json:"resourceGuid,omitempty"`
14960}
14961
14962// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14963// long-running operation.
14964type ExpressRoutePortsCreateOrUpdateFuture struct {
14965	azure.Future
14966}
14967
14968// Result returns the result of the asynchronous operation.
14969// If the operation has not completed it will return an error.
14970func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
14971	var done bool
14972	done, err = future.DoneWithContext(context.Background(), client)
14973	if err != nil {
14974		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14975		return
14976	}
14977	if !done {
14978		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
14979		return
14980	}
14981	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14982	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
14983		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
14984		if err != nil {
14985			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
14986		}
14987	}
14988	return
14989}
14990
14991// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14992// operation.
14993type ExpressRoutePortsDeleteFuture struct {
14994	azure.Future
14995}
14996
14997// Result returns the result of the asynchronous operation.
14998// If the operation has not completed it will return an error.
14999func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
15000	var done bool
15001	done, err = future.DoneWithContext(context.Background(), client)
15002	if err != nil {
15003		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
15004		return
15005	}
15006	if !done {
15007		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
15008		return
15009	}
15010	ar.Response = future.Response()
15011	return
15012}
15013
15014// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
15015type ExpressRoutePortsLocation struct {
15016	autorest.Response `json:"-"`
15017	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties.
15018	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
15019	// ID - Resource ID.
15020	ID *string `json:"id,omitempty"`
15021	// Name - READ-ONLY; Resource name.
15022	Name *string `json:"name,omitempty"`
15023	// Type - READ-ONLY; Resource type.
15024	Type *string `json:"type,omitempty"`
15025	// Location - Resource location.
15026	Location *string `json:"location,omitempty"`
15027	// Tags - Resource tags.
15028	Tags map[string]*string `json:"tags"`
15029}
15030
15031// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
15032func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
15033	objectMap := make(map[string]interface{})
15034	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
15035		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
15036	}
15037	if erpl.ID != nil {
15038		objectMap["id"] = erpl.ID
15039	}
15040	if erpl.Location != nil {
15041		objectMap["location"] = erpl.Location
15042	}
15043	if erpl.Tags != nil {
15044		objectMap["tags"] = erpl.Tags
15045	}
15046	return json.Marshal(objectMap)
15047}
15048
15049// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
15050func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
15051	var m map[string]*json.RawMessage
15052	err := json.Unmarshal(body, &m)
15053	if err != nil {
15054		return err
15055	}
15056	for k, v := range m {
15057		switch k {
15058		case "properties":
15059			if v != nil {
15060				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
15061				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
15062				if err != nil {
15063					return err
15064				}
15065				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
15066			}
15067		case "id":
15068			if v != nil {
15069				var ID string
15070				err = json.Unmarshal(*v, &ID)
15071				if err != nil {
15072					return err
15073				}
15074				erpl.ID = &ID
15075			}
15076		case "name":
15077			if v != nil {
15078				var name string
15079				err = json.Unmarshal(*v, &name)
15080				if err != nil {
15081					return err
15082				}
15083				erpl.Name = &name
15084			}
15085		case "type":
15086			if v != nil {
15087				var typeVar string
15088				err = json.Unmarshal(*v, &typeVar)
15089				if err != nil {
15090					return err
15091				}
15092				erpl.Type = &typeVar
15093			}
15094		case "location":
15095			if v != nil {
15096				var location string
15097				err = json.Unmarshal(*v, &location)
15098				if err != nil {
15099					return err
15100				}
15101				erpl.Location = &location
15102			}
15103		case "tags":
15104			if v != nil {
15105				var tags map[string]*string
15106				err = json.Unmarshal(*v, &tags)
15107				if err != nil {
15108					return err
15109				}
15110				erpl.Tags = tags
15111			}
15112		}
15113	}
15114
15115	return nil
15116}
15117
15118// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
15119type ExpressRoutePortsLocationBandwidths struct {
15120	// OfferName - READ-ONLY; Bandwidth descriptive name.
15121	OfferName *string `json:"offerName,omitempty"`
15122	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps.
15123	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
15124}
15125
15126// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
15127type ExpressRoutePortsLocationListResult struct {
15128	autorest.Response `json:"-"`
15129	// Value - The list of all ExpressRoutePort peering locations.
15130	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
15131	// NextLink - The URL to get the next set of results.
15132	NextLink *string `json:"nextLink,omitempty"`
15133}
15134
15135// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
15136// ExpressRoutePortsLocation values.
15137type ExpressRoutePortsLocationListResultIterator struct {
15138	i    int
15139	page ExpressRoutePortsLocationListResultPage
15140}
15141
15142// NextWithContext advances to the next value.  If there was an error making
15143// the request the iterator does not advance and the error is returned.
15144func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
15145	if tracing.IsEnabled() {
15146		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
15147		defer func() {
15148			sc := -1
15149			if iter.Response().Response.Response != nil {
15150				sc = iter.Response().Response.Response.StatusCode
15151			}
15152			tracing.EndSpan(ctx, sc, err)
15153		}()
15154	}
15155	iter.i++
15156	if iter.i < len(iter.page.Values()) {
15157		return nil
15158	}
15159	err = iter.page.NextWithContext(ctx)
15160	if err != nil {
15161		iter.i--
15162		return err
15163	}
15164	iter.i = 0
15165	return nil
15166}
15167
15168// Next advances to the next value.  If there was an error making
15169// the request the iterator does not advance and the error is returned.
15170// Deprecated: Use NextWithContext() instead.
15171func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
15172	return iter.NextWithContext(context.Background())
15173}
15174
15175// NotDone returns true if the enumeration should be started or is not yet complete.
15176func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
15177	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15178}
15179
15180// Response returns the raw server response from the last page request.
15181func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
15182	return iter.page.Response()
15183}
15184
15185// Value returns the current value or a zero-initialized value if the
15186// iterator has advanced beyond the end of the collection.
15187func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
15188	if !iter.page.NotDone() {
15189		return ExpressRoutePortsLocation{}
15190	}
15191	return iter.page.Values()[iter.i]
15192}
15193
15194// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
15195func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
15196	return ExpressRoutePortsLocationListResultIterator{page: page}
15197}
15198
15199// IsEmpty returns true if the ListResult contains no values.
15200func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
15201	return erpllr.Value == nil || len(*erpllr.Value) == 0
15202}
15203
15204// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
15205// It returns nil if no more results exist.
15206func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
15207	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
15208		return nil, nil
15209	}
15210	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15211		autorest.AsJSON(),
15212		autorest.AsGet(),
15213		autorest.WithBaseURL(to.String(erpllr.NextLink)))
15214}
15215
15216// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
15217type ExpressRoutePortsLocationListResultPage struct {
15218	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
15219	erpllr ExpressRoutePortsLocationListResult
15220}
15221
15222// NextWithContext advances to the next page of values.  If there was an error making
15223// the request the page does not advance and the error is returned.
15224func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
15225	if tracing.IsEnabled() {
15226		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
15227		defer func() {
15228			sc := -1
15229			if page.Response().Response.Response != nil {
15230				sc = page.Response().Response.Response.StatusCode
15231			}
15232			tracing.EndSpan(ctx, sc, err)
15233		}()
15234	}
15235	next, err := page.fn(ctx, page.erpllr)
15236	if err != nil {
15237		return err
15238	}
15239	page.erpllr = next
15240	return nil
15241}
15242
15243// Next advances to the next page of values.  If there was an error making
15244// the request the page does not advance and the error is returned.
15245// Deprecated: Use NextWithContext() instead.
15246func (page *ExpressRoutePortsLocationListResultPage) Next() error {
15247	return page.NextWithContext(context.Background())
15248}
15249
15250// NotDone returns true if the page enumeration should be started or is not yet complete.
15251func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
15252	return !page.erpllr.IsEmpty()
15253}
15254
15255// Response returns the raw server response from the last page request.
15256func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
15257	return page.erpllr
15258}
15259
15260// Values returns the slice of values for the current page or nil if there are no values.
15261func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
15262	if page.erpllr.IsEmpty() {
15263		return nil
15264	}
15265	return *page.erpllr.Value
15266}
15267
15268// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
15269func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
15270	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
15271}
15272
15273// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
15274// resources.
15275type ExpressRoutePortsLocationPropertiesFormat struct {
15276	// Address - READ-ONLY; Address of peering location.
15277	Address *string `json:"address,omitempty"`
15278	// Contact - READ-ONLY; Contact details of peering locations.
15279	Contact *string `json:"contact,omitempty"`
15280	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
15281	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
15282	// ProvisioningState - READ-ONLY; The provisioning state of the express route port location resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15283	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15284}
15285
15286// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
15287type ExpressRouteServiceProvider struct {
15288	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
15289	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
15290	// ID - Resource ID.
15291	ID *string `json:"id,omitempty"`
15292	// Name - READ-ONLY; Resource name.
15293	Name *string `json:"name,omitempty"`
15294	// Type - READ-ONLY; Resource type.
15295	Type *string `json:"type,omitempty"`
15296	// Location - Resource location.
15297	Location *string `json:"location,omitempty"`
15298	// Tags - Resource tags.
15299	Tags map[string]*string `json:"tags"`
15300}
15301
15302// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
15303func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
15304	objectMap := make(map[string]interface{})
15305	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
15306		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
15307	}
15308	if ersp.ID != nil {
15309		objectMap["id"] = ersp.ID
15310	}
15311	if ersp.Location != nil {
15312		objectMap["location"] = ersp.Location
15313	}
15314	if ersp.Tags != nil {
15315		objectMap["tags"] = ersp.Tags
15316	}
15317	return json.Marshal(objectMap)
15318}
15319
15320// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
15321func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
15322	var m map[string]*json.RawMessage
15323	err := json.Unmarshal(body, &m)
15324	if err != nil {
15325		return err
15326	}
15327	for k, v := range m {
15328		switch k {
15329		case "properties":
15330			if v != nil {
15331				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
15332				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
15333				if err != nil {
15334					return err
15335				}
15336				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
15337			}
15338		case "id":
15339			if v != nil {
15340				var ID string
15341				err = json.Unmarshal(*v, &ID)
15342				if err != nil {
15343					return err
15344				}
15345				ersp.ID = &ID
15346			}
15347		case "name":
15348			if v != nil {
15349				var name string
15350				err = json.Unmarshal(*v, &name)
15351				if err != nil {
15352					return err
15353				}
15354				ersp.Name = &name
15355			}
15356		case "type":
15357			if v != nil {
15358				var typeVar string
15359				err = json.Unmarshal(*v, &typeVar)
15360				if err != nil {
15361					return err
15362				}
15363				ersp.Type = &typeVar
15364			}
15365		case "location":
15366			if v != nil {
15367				var location string
15368				err = json.Unmarshal(*v, &location)
15369				if err != nil {
15370					return err
15371				}
15372				ersp.Location = &location
15373			}
15374		case "tags":
15375			if v != nil {
15376				var tags map[string]*string
15377				err = json.Unmarshal(*v, &tags)
15378				if err != nil {
15379					return err
15380				}
15381				ersp.Tags = tags
15382			}
15383		}
15384	}
15385
15386	return nil
15387}
15388
15389// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
15390// resources.
15391type ExpressRouteServiceProviderBandwidthsOffered struct {
15392	// OfferName - The OfferName.
15393	OfferName *string `json:"offerName,omitempty"`
15394	// ValueInMbps - The ValueInMbps.
15395	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
15396}
15397
15398// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
15399type ExpressRouteServiceProviderListResult struct {
15400	autorest.Response `json:"-"`
15401	// Value - A list of ExpressRouteResourceProvider resources.
15402	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
15403	// NextLink - The URL to get the next set of results.
15404	NextLink *string `json:"nextLink,omitempty"`
15405}
15406
15407// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
15408// ExpressRouteServiceProvider values.
15409type ExpressRouteServiceProviderListResultIterator struct {
15410	i    int
15411	page ExpressRouteServiceProviderListResultPage
15412}
15413
15414// NextWithContext advances to the next value.  If there was an error making
15415// the request the iterator does not advance and the error is returned.
15416func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
15417	if tracing.IsEnabled() {
15418		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
15419		defer func() {
15420			sc := -1
15421			if iter.Response().Response.Response != nil {
15422				sc = iter.Response().Response.Response.StatusCode
15423			}
15424			tracing.EndSpan(ctx, sc, err)
15425		}()
15426	}
15427	iter.i++
15428	if iter.i < len(iter.page.Values()) {
15429		return nil
15430	}
15431	err = iter.page.NextWithContext(ctx)
15432	if err != nil {
15433		iter.i--
15434		return err
15435	}
15436	iter.i = 0
15437	return nil
15438}
15439
15440// Next advances to the next value.  If there was an error making
15441// the request the iterator does not advance and the error is returned.
15442// Deprecated: Use NextWithContext() instead.
15443func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
15444	return iter.NextWithContext(context.Background())
15445}
15446
15447// NotDone returns true if the enumeration should be started or is not yet complete.
15448func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
15449	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15450}
15451
15452// Response returns the raw server response from the last page request.
15453func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
15454	return iter.page.Response()
15455}
15456
15457// Value returns the current value or a zero-initialized value if the
15458// iterator has advanced beyond the end of the collection.
15459func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
15460	if !iter.page.NotDone() {
15461		return ExpressRouteServiceProvider{}
15462	}
15463	return iter.page.Values()[iter.i]
15464}
15465
15466// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
15467func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
15468	return ExpressRouteServiceProviderListResultIterator{page: page}
15469}
15470
15471// IsEmpty returns true if the ListResult contains no values.
15472func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
15473	return ersplr.Value == nil || len(*ersplr.Value) == 0
15474}
15475
15476// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
15477// It returns nil if no more results exist.
15478func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
15479	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
15480		return nil, nil
15481	}
15482	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15483		autorest.AsJSON(),
15484		autorest.AsGet(),
15485		autorest.WithBaseURL(to.String(ersplr.NextLink)))
15486}
15487
15488// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
15489type ExpressRouteServiceProviderListResultPage struct {
15490	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
15491	ersplr ExpressRouteServiceProviderListResult
15492}
15493
15494// NextWithContext advances to the next page of values.  If there was an error making
15495// the request the page does not advance and the error is returned.
15496func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
15497	if tracing.IsEnabled() {
15498		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
15499		defer func() {
15500			sc := -1
15501			if page.Response().Response.Response != nil {
15502				sc = page.Response().Response.Response.StatusCode
15503			}
15504			tracing.EndSpan(ctx, sc, err)
15505		}()
15506	}
15507	next, err := page.fn(ctx, page.ersplr)
15508	if err != nil {
15509		return err
15510	}
15511	page.ersplr = next
15512	return nil
15513}
15514
15515// Next advances to the next page of values.  If there was an error making
15516// the request the page does not advance and the error is returned.
15517// Deprecated: Use NextWithContext() instead.
15518func (page *ExpressRouteServiceProviderListResultPage) Next() error {
15519	return page.NextWithContext(context.Background())
15520}
15521
15522// NotDone returns true if the page enumeration should be started or is not yet complete.
15523func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
15524	return !page.ersplr.IsEmpty()
15525}
15526
15527// Response returns the raw server response from the last page request.
15528func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
15529	return page.ersplr
15530}
15531
15532// Values returns the slice of values for the current page or nil if there are no values.
15533func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
15534	if page.ersplr.IsEmpty() {
15535		return nil
15536	}
15537	return *page.ersplr.Value
15538}
15539
15540// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
15541func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
15542	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
15543}
15544
15545// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
15546type ExpressRouteServiceProviderPropertiesFormat struct {
15547	// PeeringLocations - A list of peering locations.
15548	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
15549	// BandwidthsOffered - A list of bandwidths offered.
15550	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
15551	// ProvisioningState - READ-ONLY; The provisioning state of the express route service provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15552	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15553}
15554
15555// FirewallPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
15556// long-running operation.
15557type FirewallPoliciesCreateOrUpdateFuture struct {
15558	azure.Future
15559}
15560
15561// Result returns the result of the asynchronous operation.
15562// If the operation has not completed it will return an error.
15563func (future *FirewallPoliciesCreateOrUpdateFuture) Result(client FirewallPoliciesClient) (fp FirewallPolicy, err error) {
15564	var done bool
15565	done, err = future.DoneWithContext(context.Background(), client)
15566	if err != nil {
15567		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15568		return
15569	}
15570	if !done {
15571		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesCreateOrUpdateFuture")
15572		return
15573	}
15574	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15575	if fp.Response.Response, err = future.GetResult(sender); err == nil && fp.Response.Response.StatusCode != http.StatusNoContent {
15576		fp, err = client.CreateOrUpdateResponder(fp.Response.Response)
15577		if err != nil {
15578			err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", fp.Response.Response, "Failure responding to request")
15579		}
15580	}
15581	return
15582}
15583
15584// FirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
15585// operation.
15586type FirewallPoliciesDeleteFuture struct {
15587	azure.Future
15588}
15589
15590// Result returns the result of the asynchronous operation.
15591// If the operation has not completed it will return an error.
15592func (future *FirewallPoliciesDeleteFuture) Result(client FirewallPoliciesClient) (ar autorest.Response, err error) {
15593	var done bool
15594	done, err = future.DoneWithContext(context.Background(), client)
15595	if err != nil {
15596		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
15597		return
15598	}
15599	if !done {
15600		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesDeleteFuture")
15601		return
15602	}
15603	ar.Response = future.Response()
15604	return
15605}
15606
15607// FirewallPolicy firewallPolicy Resource.
15608type FirewallPolicy struct {
15609	autorest.Response `json:"-"`
15610	// FirewallPolicyPropertiesFormat - Properties of the firewall policy.
15611	*FirewallPolicyPropertiesFormat `json:"properties,omitempty"`
15612	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
15613	Etag *string `json:"etag,omitempty"`
15614	// Identity - The identity of the firewall policy.
15615	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
15616	// ID - Resource ID.
15617	ID *string `json:"id,omitempty"`
15618	// Name - READ-ONLY; Resource name.
15619	Name *string `json:"name,omitempty"`
15620	// Type - READ-ONLY; Resource type.
15621	Type *string `json:"type,omitempty"`
15622	// Location - Resource location.
15623	Location *string `json:"location,omitempty"`
15624	// Tags - Resource tags.
15625	Tags map[string]*string `json:"tags"`
15626}
15627
15628// MarshalJSON is the custom marshaler for FirewallPolicy.
15629func (fp FirewallPolicy) MarshalJSON() ([]byte, error) {
15630	objectMap := make(map[string]interface{})
15631	if fp.FirewallPolicyPropertiesFormat != nil {
15632		objectMap["properties"] = fp.FirewallPolicyPropertiesFormat
15633	}
15634	if fp.Identity != nil {
15635		objectMap["identity"] = fp.Identity
15636	}
15637	if fp.ID != nil {
15638		objectMap["id"] = fp.ID
15639	}
15640	if fp.Location != nil {
15641		objectMap["location"] = fp.Location
15642	}
15643	if fp.Tags != nil {
15644		objectMap["tags"] = fp.Tags
15645	}
15646	return json.Marshal(objectMap)
15647}
15648
15649// UnmarshalJSON is the custom unmarshaler for FirewallPolicy struct.
15650func (fp *FirewallPolicy) UnmarshalJSON(body []byte) error {
15651	var m map[string]*json.RawMessage
15652	err := json.Unmarshal(body, &m)
15653	if err != nil {
15654		return err
15655	}
15656	for k, v := range m {
15657		switch k {
15658		case "properties":
15659			if v != nil {
15660				var firewallPolicyPropertiesFormat FirewallPolicyPropertiesFormat
15661				err = json.Unmarshal(*v, &firewallPolicyPropertiesFormat)
15662				if err != nil {
15663					return err
15664				}
15665				fp.FirewallPolicyPropertiesFormat = &firewallPolicyPropertiesFormat
15666			}
15667		case "etag":
15668			if v != nil {
15669				var etag string
15670				err = json.Unmarshal(*v, &etag)
15671				if err != nil {
15672					return err
15673				}
15674				fp.Etag = &etag
15675			}
15676		case "identity":
15677			if v != nil {
15678				var identity ManagedServiceIdentity
15679				err = json.Unmarshal(*v, &identity)
15680				if err != nil {
15681					return err
15682				}
15683				fp.Identity = &identity
15684			}
15685		case "id":
15686			if v != nil {
15687				var ID string
15688				err = json.Unmarshal(*v, &ID)
15689				if err != nil {
15690					return err
15691				}
15692				fp.ID = &ID
15693			}
15694		case "name":
15695			if v != nil {
15696				var name string
15697				err = json.Unmarshal(*v, &name)
15698				if err != nil {
15699					return err
15700				}
15701				fp.Name = &name
15702			}
15703		case "type":
15704			if v != nil {
15705				var typeVar string
15706				err = json.Unmarshal(*v, &typeVar)
15707				if err != nil {
15708					return err
15709				}
15710				fp.Type = &typeVar
15711			}
15712		case "location":
15713			if v != nil {
15714				var location string
15715				err = json.Unmarshal(*v, &location)
15716				if err != nil {
15717					return err
15718				}
15719				fp.Location = &location
15720			}
15721		case "tags":
15722			if v != nil {
15723				var tags map[string]*string
15724				err = json.Unmarshal(*v, &tags)
15725				if err != nil {
15726					return err
15727				}
15728				fp.Tags = tags
15729			}
15730		}
15731	}
15732
15733	return nil
15734}
15735
15736// FirewallPolicyCertificateAuthority trusted Root certificates properties for tls.
15737type FirewallPolicyCertificateAuthority struct {
15738	// FirewallPolicyCertificateAuthorityPropertiesFormat - Properties of the certificate authority.
15739	*FirewallPolicyCertificateAuthorityPropertiesFormat `json:"properties,omitempty"`
15740	// Name - Name of the CA certificate.
15741	Name *string `json:"name,omitempty"`
15742}
15743
15744// MarshalJSON is the custom marshaler for FirewallPolicyCertificateAuthority.
15745func (fpca FirewallPolicyCertificateAuthority) MarshalJSON() ([]byte, error) {
15746	objectMap := make(map[string]interface{})
15747	if fpca.FirewallPolicyCertificateAuthorityPropertiesFormat != nil {
15748		objectMap["properties"] = fpca.FirewallPolicyCertificateAuthorityPropertiesFormat
15749	}
15750	if fpca.Name != nil {
15751		objectMap["name"] = fpca.Name
15752	}
15753	return json.Marshal(objectMap)
15754}
15755
15756// UnmarshalJSON is the custom unmarshaler for FirewallPolicyCertificateAuthority struct.
15757func (fpca *FirewallPolicyCertificateAuthority) UnmarshalJSON(body []byte) error {
15758	var m map[string]*json.RawMessage
15759	err := json.Unmarshal(body, &m)
15760	if err != nil {
15761		return err
15762	}
15763	for k, v := range m {
15764		switch k {
15765		case "properties":
15766			if v != nil {
15767				var firewallPolicyCertificateAuthorityPropertiesFormat FirewallPolicyCertificateAuthorityPropertiesFormat
15768				err = json.Unmarshal(*v, &firewallPolicyCertificateAuthorityPropertiesFormat)
15769				if err != nil {
15770					return err
15771				}
15772				fpca.FirewallPolicyCertificateAuthorityPropertiesFormat = &firewallPolicyCertificateAuthorityPropertiesFormat
15773			}
15774		case "name":
15775			if v != nil {
15776				var name string
15777				err = json.Unmarshal(*v, &name)
15778				if err != nil {
15779					return err
15780				}
15781				fpca.Name = &name
15782			}
15783		}
15784	}
15785
15786	return nil
15787}
15788
15789// FirewallPolicyCertificateAuthorityPropertiesFormat trusted Root certificates properties for tls.
15790type FirewallPolicyCertificateAuthorityPropertiesFormat struct {
15791	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
15792	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
15793}
15794
15795// FirewallPolicyFilterRuleCollection firewall Policy Filter Rule Collection.
15796type FirewallPolicyFilterRuleCollection struct {
15797	// Action - The action type of a Filter rule collection.
15798	Action *FirewallPolicyFilterRuleCollectionAction `json:"action,omitempty"`
15799	// Rules - List of rules included in a rule collection.
15800	Rules *[]BasicFirewallPolicyRule `json:"rules,omitempty"`
15801	// Name - The name of the rule collection.
15802	Name *string `json:"name,omitempty"`
15803	// Priority - Priority of the Firewall Policy Rule Collection resource.
15804	Priority *int32 `json:"priority,omitempty"`
15805	// RuleCollectionType - Possible values include: 'RuleCollectionTypeFirewallPolicyRuleCollection', 'RuleCollectionTypeFirewallPolicyNatRuleCollection', 'RuleCollectionTypeFirewallPolicyFilterRuleCollection'
15806	RuleCollectionType RuleCollectionType `json:"ruleCollectionType,omitempty"`
15807}
15808
15809// MarshalJSON is the custom marshaler for FirewallPolicyFilterRuleCollection.
15810func (fpfrc FirewallPolicyFilterRuleCollection) MarshalJSON() ([]byte, error) {
15811	fpfrc.RuleCollectionType = RuleCollectionTypeFirewallPolicyFilterRuleCollection
15812	objectMap := make(map[string]interface{})
15813	if fpfrc.Action != nil {
15814		objectMap["action"] = fpfrc.Action
15815	}
15816	if fpfrc.Rules != nil {
15817		objectMap["rules"] = fpfrc.Rules
15818	}
15819	if fpfrc.Name != nil {
15820		objectMap["name"] = fpfrc.Name
15821	}
15822	if fpfrc.Priority != nil {
15823		objectMap["priority"] = fpfrc.Priority
15824	}
15825	if fpfrc.RuleCollectionType != "" {
15826		objectMap["ruleCollectionType"] = fpfrc.RuleCollectionType
15827	}
15828	return json.Marshal(objectMap)
15829}
15830
15831// AsFirewallPolicyNatRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyFilterRuleCollection.
15832func (fpfrc FirewallPolicyFilterRuleCollection) AsFirewallPolicyNatRuleCollection() (*FirewallPolicyNatRuleCollection, bool) {
15833	return nil, false
15834}
15835
15836// AsFirewallPolicyFilterRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyFilterRuleCollection.
15837func (fpfrc FirewallPolicyFilterRuleCollection) AsFirewallPolicyFilterRuleCollection() (*FirewallPolicyFilterRuleCollection, bool) {
15838	return &fpfrc, true
15839}
15840
15841// AsFirewallPolicyRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyFilterRuleCollection.
15842func (fpfrc FirewallPolicyFilterRuleCollection) AsFirewallPolicyRuleCollection() (*FirewallPolicyRuleCollection, bool) {
15843	return nil, false
15844}
15845
15846// AsBasicFirewallPolicyRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyFilterRuleCollection.
15847func (fpfrc FirewallPolicyFilterRuleCollection) AsBasicFirewallPolicyRuleCollection() (BasicFirewallPolicyRuleCollection, bool) {
15848	return &fpfrc, true
15849}
15850
15851// UnmarshalJSON is the custom unmarshaler for FirewallPolicyFilterRuleCollection struct.
15852func (fpfrc *FirewallPolicyFilterRuleCollection) UnmarshalJSON(body []byte) error {
15853	var m map[string]*json.RawMessage
15854	err := json.Unmarshal(body, &m)
15855	if err != nil {
15856		return err
15857	}
15858	for k, v := range m {
15859		switch k {
15860		case "action":
15861			if v != nil {
15862				var action FirewallPolicyFilterRuleCollectionAction
15863				err = json.Unmarshal(*v, &action)
15864				if err != nil {
15865					return err
15866				}
15867				fpfrc.Action = &action
15868			}
15869		case "rules":
15870			if v != nil {
15871				rules, err := unmarshalBasicFirewallPolicyRuleArray(*v)
15872				if err != nil {
15873					return err
15874				}
15875				fpfrc.Rules = &rules
15876			}
15877		case "name":
15878			if v != nil {
15879				var name string
15880				err = json.Unmarshal(*v, &name)
15881				if err != nil {
15882					return err
15883				}
15884				fpfrc.Name = &name
15885			}
15886		case "priority":
15887			if v != nil {
15888				var priority int32
15889				err = json.Unmarshal(*v, &priority)
15890				if err != nil {
15891					return err
15892				}
15893				fpfrc.Priority = &priority
15894			}
15895		case "ruleCollectionType":
15896			if v != nil {
15897				var ruleCollectionType RuleCollectionType
15898				err = json.Unmarshal(*v, &ruleCollectionType)
15899				if err != nil {
15900					return err
15901				}
15902				fpfrc.RuleCollectionType = ruleCollectionType
15903			}
15904		}
15905	}
15906
15907	return nil
15908}
15909
15910// FirewallPolicyFilterRuleCollectionAction properties of the FirewallPolicyFilterRuleCollectionAction.
15911type FirewallPolicyFilterRuleCollectionAction struct {
15912	// Type - The type of action. Possible values include: 'FirewallPolicyFilterRuleCollectionActionTypeAllow', 'FirewallPolicyFilterRuleCollectionActionTypeDeny'
15913	Type FirewallPolicyFilterRuleCollectionActionType `json:"type,omitempty"`
15914}
15915
15916// FirewallPolicyListResult response for ListFirewallPolicies API service call.
15917type FirewallPolicyListResult struct {
15918	autorest.Response `json:"-"`
15919	// Value - List of Firewall Policies in a resource group.
15920	Value *[]FirewallPolicy `json:"value,omitempty"`
15921	// NextLink - URL to get the next set of results.
15922	NextLink *string `json:"nextLink,omitempty"`
15923}
15924
15925// FirewallPolicyListResultIterator provides access to a complete listing of FirewallPolicy values.
15926type FirewallPolicyListResultIterator struct {
15927	i    int
15928	page FirewallPolicyListResultPage
15929}
15930
15931// NextWithContext advances to the next value.  If there was an error making
15932// the request the iterator does not advance and the error is returned.
15933func (iter *FirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
15934	if tracing.IsEnabled() {
15935		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultIterator.NextWithContext")
15936		defer func() {
15937			sc := -1
15938			if iter.Response().Response.Response != nil {
15939				sc = iter.Response().Response.Response.StatusCode
15940			}
15941			tracing.EndSpan(ctx, sc, err)
15942		}()
15943	}
15944	iter.i++
15945	if iter.i < len(iter.page.Values()) {
15946		return nil
15947	}
15948	err = iter.page.NextWithContext(ctx)
15949	if err != nil {
15950		iter.i--
15951		return err
15952	}
15953	iter.i = 0
15954	return nil
15955}
15956
15957// Next advances to the next value.  If there was an error making
15958// the request the iterator does not advance and the error is returned.
15959// Deprecated: Use NextWithContext() instead.
15960func (iter *FirewallPolicyListResultIterator) Next() error {
15961	return iter.NextWithContext(context.Background())
15962}
15963
15964// NotDone returns true if the enumeration should be started or is not yet complete.
15965func (iter FirewallPolicyListResultIterator) NotDone() bool {
15966	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15967}
15968
15969// Response returns the raw server response from the last page request.
15970func (iter FirewallPolicyListResultIterator) Response() FirewallPolicyListResult {
15971	return iter.page.Response()
15972}
15973
15974// Value returns the current value or a zero-initialized value if the
15975// iterator has advanced beyond the end of the collection.
15976func (iter FirewallPolicyListResultIterator) Value() FirewallPolicy {
15977	if !iter.page.NotDone() {
15978		return FirewallPolicy{}
15979	}
15980	return iter.page.Values()[iter.i]
15981}
15982
15983// Creates a new instance of the FirewallPolicyListResultIterator type.
15984func NewFirewallPolicyListResultIterator(page FirewallPolicyListResultPage) FirewallPolicyListResultIterator {
15985	return FirewallPolicyListResultIterator{page: page}
15986}
15987
15988// IsEmpty returns true if the ListResult contains no values.
15989func (fplr FirewallPolicyListResult) IsEmpty() bool {
15990	return fplr.Value == nil || len(*fplr.Value) == 0
15991}
15992
15993// firewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
15994// It returns nil if no more results exist.
15995func (fplr FirewallPolicyListResult) firewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
15996	if fplr.NextLink == nil || len(to.String(fplr.NextLink)) < 1 {
15997		return nil, nil
15998	}
15999	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16000		autorest.AsJSON(),
16001		autorest.AsGet(),
16002		autorest.WithBaseURL(to.String(fplr.NextLink)))
16003}
16004
16005// FirewallPolicyListResultPage contains a page of FirewallPolicy values.
16006type FirewallPolicyListResultPage struct {
16007	fn   func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)
16008	fplr FirewallPolicyListResult
16009}
16010
16011// NextWithContext advances to the next page of values.  If there was an error making
16012// the request the page does not advance and the error is returned.
16013func (page *FirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
16014	if tracing.IsEnabled() {
16015		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultPage.NextWithContext")
16016		defer func() {
16017			sc := -1
16018			if page.Response().Response.Response != nil {
16019				sc = page.Response().Response.Response.StatusCode
16020			}
16021			tracing.EndSpan(ctx, sc, err)
16022		}()
16023	}
16024	next, err := page.fn(ctx, page.fplr)
16025	if err != nil {
16026		return err
16027	}
16028	page.fplr = next
16029	return nil
16030}
16031
16032// Next advances to the next page of values.  If there was an error making
16033// the request the page does not advance and the error is returned.
16034// Deprecated: Use NextWithContext() instead.
16035func (page *FirewallPolicyListResultPage) Next() error {
16036	return page.NextWithContext(context.Background())
16037}
16038
16039// NotDone returns true if the page enumeration should be started or is not yet complete.
16040func (page FirewallPolicyListResultPage) NotDone() bool {
16041	return !page.fplr.IsEmpty()
16042}
16043
16044// Response returns the raw server response from the last page request.
16045func (page FirewallPolicyListResultPage) Response() FirewallPolicyListResult {
16046	return page.fplr
16047}
16048
16049// Values returns the slice of values for the current page or nil if there are no values.
16050func (page FirewallPolicyListResultPage) Values() []FirewallPolicy {
16051	if page.fplr.IsEmpty() {
16052		return nil
16053	}
16054	return *page.fplr.Value
16055}
16056
16057// Creates a new instance of the FirewallPolicyListResultPage type.
16058func NewFirewallPolicyListResultPage(getNextPage func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)) FirewallPolicyListResultPage {
16059	return FirewallPolicyListResultPage{fn: getNextPage}
16060}
16061
16062// FirewallPolicyNatRuleCollection firewall Policy NAT Rule Collection.
16063type FirewallPolicyNatRuleCollection struct {
16064	// Action - The action type of a Nat rule collection.
16065	Action *FirewallPolicyNatRuleCollectionAction `json:"action,omitempty"`
16066	// Rules - List of rules included in a rule collection.
16067	Rules *[]BasicFirewallPolicyRule `json:"rules,omitempty"`
16068	// Name - The name of the rule collection.
16069	Name *string `json:"name,omitempty"`
16070	// Priority - Priority of the Firewall Policy Rule Collection resource.
16071	Priority *int32 `json:"priority,omitempty"`
16072	// RuleCollectionType - Possible values include: 'RuleCollectionTypeFirewallPolicyRuleCollection', 'RuleCollectionTypeFirewallPolicyNatRuleCollection', 'RuleCollectionTypeFirewallPolicyFilterRuleCollection'
16073	RuleCollectionType RuleCollectionType `json:"ruleCollectionType,omitempty"`
16074}
16075
16076// MarshalJSON is the custom marshaler for FirewallPolicyNatRuleCollection.
16077func (fpnrc FirewallPolicyNatRuleCollection) MarshalJSON() ([]byte, error) {
16078	fpnrc.RuleCollectionType = RuleCollectionTypeFirewallPolicyNatRuleCollection
16079	objectMap := make(map[string]interface{})
16080	if fpnrc.Action != nil {
16081		objectMap["action"] = fpnrc.Action
16082	}
16083	if fpnrc.Rules != nil {
16084		objectMap["rules"] = fpnrc.Rules
16085	}
16086	if fpnrc.Name != nil {
16087		objectMap["name"] = fpnrc.Name
16088	}
16089	if fpnrc.Priority != nil {
16090		objectMap["priority"] = fpnrc.Priority
16091	}
16092	if fpnrc.RuleCollectionType != "" {
16093		objectMap["ruleCollectionType"] = fpnrc.RuleCollectionType
16094	}
16095	return json.Marshal(objectMap)
16096}
16097
16098// AsFirewallPolicyNatRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyNatRuleCollection.
16099func (fpnrc FirewallPolicyNatRuleCollection) AsFirewallPolicyNatRuleCollection() (*FirewallPolicyNatRuleCollection, bool) {
16100	return &fpnrc, true
16101}
16102
16103// AsFirewallPolicyFilterRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyNatRuleCollection.
16104func (fpnrc FirewallPolicyNatRuleCollection) AsFirewallPolicyFilterRuleCollection() (*FirewallPolicyFilterRuleCollection, bool) {
16105	return nil, false
16106}
16107
16108// AsFirewallPolicyRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyNatRuleCollection.
16109func (fpnrc FirewallPolicyNatRuleCollection) AsFirewallPolicyRuleCollection() (*FirewallPolicyRuleCollection, bool) {
16110	return nil, false
16111}
16112
16113// AsBasicFirewallPolicyRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyNatRuleCollection.
16114func (fpnrc FirewallPolicyNatRuleCollection) AsBasicFirewallPolicyRuleCollection() (BasicFirewallPolicyRuleCollection, bool) {
16115	return &fpnrc, true
16116}
16117
16118// UnmarshalJSON is the custom unmarshaler for FirewallPolicyNatRuleCollection struct.
16119func (fpnrc *FirewallPolicyNatRuleCollection) UnmarshalJSON(body []byte) error {
16120	var m map[string]*json.RawMessage
16121	err := json.Unmarshal(body, &m)
16122	if err != nil {
16123		return err
16124	}
16125	for k, v := range m {
16126		switch k {
16127		case "action":
16128			if v != nil {
16129				var action FirewallPolicyNatRuleCollectionAction
16130				err = json.Unmarshal(*v, &action)
16131				if err != nil {
16132					return err
16133				}
16134				fpnrc.Action = &action
16135			}
16136		case "rules":
16137			if v != nil {
16138				rules, err := unmarshalBasicFirewallPolicyRuleArray(*v)
16139				if err != nil {
16140					return err
16141				}
16142				fpnrc.Rules = &rules
16143			}
16144		case "name":
16145			if v != nil {
16146				var name string
16147				err = json.Unmarshal(*v, &name)
16148				if err != nil {
16149					return err
16150				}
16151				fpnrc.Name = &name
16152			}
16153		case "priority":
16154			if v != nil {
16155				var priority int32
16156				err = json.Unmarshal(*v, &priority)
16157				if err != nil {
16158					return err
16159				}
16160				fpnrc.Priority = &priority
16161			}
16162		case "ruleCollectionType":
16163			if v != nil {
16164				var ruleCollectionType RuleCollectionType
16165				err = json.Unmarshal(*v, &ruleCollectionType)
16166				if err != nil {
16167					return err
16168				}
16169				fpnrc.RuleCollectionType = ruleCollectionType
16170			}
16171		}
16172	}
16173
16174	return nil
16175}
16176
16177// FirewallPolicyNatRuleCollectionAction properties of the FirewallPolicyNatRuleCollectionAction.
16178type FirewallPolicyNatRuleCollectionAction struct {
16179	// Type - The type of action. Possible values include: 'DNAT'
16180	Type FirewallPolicyNatRuleCollectionActionType `json:"type,omitempty"`
16181}
16182
16183// FirewallPolicyPropertiesFormat firewall Policy definition.
16184type FirewallPolicyPropertiesFormat struct {
16185	// RuleCollectionGroups - READ-ONLY; List of references to FirewallPolicyRuleCollectionGroups.
16186	RuleCollectionGroups *[]SubResource `json:"ruleCollectionGroups,omitempty"`
16187	// ProvisioningState - READ-ONLY; The provisioning state of the firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16188	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16189	// BasePolicy - The parent firewall policy from which rules are inherited.
16190	BasePolicy *SubResource `json:"basePolicy,omitempty"`
16191	// Firewalls - READ-ONLY; List of references to Azure Firewalls that this Firewall Policy is associated with.
16192	Firewalls *[]SubResource `json:"firewalls,omitempty"`
16193	// ChildPolicies - READ-ONLY; List of references to Child Firewall Policies.
16194	ChildPolicies *[]SubResource `json:"childPolicies,omitempty"`
16195	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
16196	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
16197	// ThreatIntelWhitelist - ThreatIntel Whitelist for Firewall Policy.
16198	ThreatIntelWhitelist *FirewallPolicyThreatIntelWhitelist `json:"threatIntelWhitelist,omitempty"`
16199	// IntrusionSystemMode - The operation mode for Intrusion system. Possible values include: 'FirewallPolicyIntrusionSystemModeEnabled', 'FirewallPolicyIntrusionSystemModeDisabled'
16200	IntrusionSystemMode FirewallPolicyIntrusionSystemMode `json:"intrusionSystemMode,omitempty"`
16201	// TransportSecurity - TLS Configuration definition.
16202	TransportSecurity *FirewallPolicyTransportSecurity `json:"transportSecurity,omitempty"`
16203	// DNSSettings - DNS Proxy Settings definition.
16204	DNSSettings *DNSSettings `json:"dnsSettings,omitempty"`
16205}
16206
16207// BasicFirewallPolicyRule properties of a rule.
16208type BasicFirewallPolicyRule interface {
16209	AsApplicationRule() (*ApplicationRule, bool)
16210	AsNatRule() (*NatRule, bool)
16211	AsRule() (*Rule, bool)
16212	AsFirewallPolicyRule() (*FirewallPolicyRule, bool)
16213}
16214
16215// FirewallPolicyRule properties of a rule.
16216type FirewallPolicyRule struct {
16217	// Name - Name of the rule.
16218	Name *string `json:"name,omitempty"`
16219	// Description - Description of the rule.
16220	Description *string `json:"description,omitempty"`
16221	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeApplicationRule', 'RuleTypeNatRule', 'RuleTypeNetworkRule'
16222	RuleType RuleType `json:"ruleType,omitempty"`
16223}
16224
16225func unmarshalBasicFirewallPolicyRule(body []byte) (BasicFirewallPolicyRule, error) {
16226	var m map[string]interface{}
16227	err := json.Unmarshal(body, &m)
16228	if err != nil {
16229		return nil, err
16230	}
16231
16232	switch m["ruleType"] {
16233	case string(RuleTypeApplicationRule):
16234		var ar ApplicationRule
16235		err := json.Unmarshal(body, &ar)
16236		return ar, err
16237	case string(RuleTypeNatRule):
16238		var nr NatRule
16239		err := json.Unmarshal(body, &nr)
16240		return nr, err
16241	case string(RuleTypeNetworkRule):
16242		var r Rule
16243		err := json.Unmarshal(body, &r)
16244		return r, err
16245	default:
16246		var fpr FirewallPolicyRule
16247		err := json.Unmarshal(body, &fpr)
16248		return fpr, err
16249	}
16250}
16251func unmarshalBasicFirewallPolicyRuleArray(body []byte) ([]BasicFirewallPolicyRule, error) {
16252	var rawMessages []*json.RawMessage
16253	err := json.Unmarshal(body, &rawMessages)
16254	if err != nil {
16255		return nil, err
16256	}
16257
16258	fprArray := make([]BasicFirewallPolicyRule, len(rawMessages))
16259
16260	for index, rawMessage := range rawMessages {
16261		fpr, err := unmarshalBasicFirewallPolicyRule(*rawMessage)
16262		if err != nil {
16263			return nil, err
16264		}
16265		fprArray[index] = fpr
16266	}
16267	return fprArray, nil
16268}
16269
16270// MarshalJSON is the custom marshaler for FirewallPolicyRule.
16271func (fpr FirewallPolicyRule) MarshalJSON() ([]byte, error) {
16272	fpr.RuleType = RuleTypeFirewallPolicyRule
16273	objectMap := make(map[string]interface{})
16274	if fpr.Name != nil {
16275		objectMap["name"] = fpr.Name
16276	}
16277	if fpr.Description != nil {
16278		objectMap["description"] = fpr.Description
16279	}
16280	if fpr.RuleType != "" {
16281		objectMap["ruleType"] = fpr.RuleType
16282	}
16283	return json.Marshal(objectMap)
16284}
16285
16286// AsApplicationRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
16287func (fpr FirewallPolicyRule) AsApplicationRule() (*ApplicationRule, bool) {
16288	return nil, false
16289}
16290
16291// AsNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
16292func (fpr FirewallPolicyRule) AsNatRule() (*NatRule, bool) {
16293	return nil, false
16294}
16295
16296// AsRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
16297func (fpr FirewallPolicyRule) AsRule() (*Rule, bool) {
16298	return nil, false
16299}
16300
16301// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
16302func (fpr FirewallPolicyRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
16303	return &fpr, true
16304}
16305
16306// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
16307func (fpr FirewallPolicyRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
16308	return &fpr, true
16309}
16310
16311// FirewallPolicyRuleApplicationProtocol properties of the application rule protocol.
16312type FirewallPolicyRuleApplicationProtocol struct {
16313	// ProtocolType - Protocol type. Possible values include: 'FirewallPolicyRuleApplicationProtocolTypeHTTP', 'FirewallPolicyRuleApplicationProtocolTypeHTTPS'
16314	ProtocolType FirewallPolicyRuleApplicationProtocolType `json:"protocolType,omitempty"`
16315	// Port - Port number for the protocol, cannot be greater than 64000.
16316	Port *int32 `json:"port,omitempty"`
16317}
16318
16319// BasicFirewallPolicyRuleCollection properties of the rule collection.
16320type BasicFirewallPolicyRuleCollection interface {
16321	AsFirewallPolicyNatRuleCollection() (*FirewallPolicyNatRuleCollection, bool)
16322	AsFirewallPolicyFilterRuleCollection() (*FirewallPolicyFilterRuleCollection, bool)
16323	AsFirewallPolicyRuleCollection() (*FirewallPolicyRuleCollection, bool)
16324}
16325
16326// FirewallPolicyRuleCollection properties of the rule collection.
16327type FirewallPolicyRuleCollection struct {
16328	// Name - The name of the rule collection.
16329	Name *string `json:"name,omitempty"`
16330	// Priority - Priority of the Firewall Policy Rule Collection resource.
16331	Priority *int32 `json:"priority,omitempty"`
16332	// RuleCollectionType - Possible values include: 'RuleCollectionTypeFirewallPolicyRuleCollection', 'RuleCollectionTypeFirewallPolicyNatRuleCollection', 'RuleCollectionTypeFirewallPolicyFilterRuleCollection'
16333	RuleCollectionType RuleCollectionType `json:"ruleCollectionType,omitempty"`
16334}
16335
16336func unmarshalBasicFirewallPolicyRuleCollection(body []byte) (BasicFirewallPolicyRuleCollection, error) {
16337	var m map[string]interface{}
16338	err := json.Unmarshal(body, &m)
16339	if err != nil {
16340		return nil, err
16341	}
16342
16343	switch m["ruleCollectionType"] {
16344	case string(RuleCollectionTypeFirewallPolicyNatRuleCollection):
16345		var fpnrc FirewallPolicyNatRuleCollection
16346		err := json.Unmarshal(body, &fpnrc)
16347		return fpnrc, err
16348	case string(RuleCollectionTypeFirewallPolicyFilterRuleCollection):
16349		var fpfrc FirewallPolicyFilterRuleCollection
16350		err := json.Unmarshal(body, &fpfrc)
16351		return fpfrc, err
16352	default:
16353		var fprc FirewallPolicyRuleCollection
16354		err := json.Unmarshal(body, &fprc)
16355		return fprc, err
16356	}
16357}
16358func unmarshalBasicFirewallPolicyRuleCollectionArray(body []byte) ([]BasicFirewallPolicyRuleCollection, error) {
16359	var rawMessages []*json.RawMessage
16360	err := json.Unmarshal(body, &rawMessages)
16361	if err != nil {
16362		return nil, err
16363	}
16364
16365	fprcArray := make([]BasicFirewallPolicyRuleCollection, len(rawMessages))
16366
16367	for index, rawMessage := range rawMessages {
16368		fprc, err := unmarshalBasicFirewallPolicyRuleCollection(*rawMessage)
16369		if err != nil {
16370			return nil, err
16371		}
16372		fprcArray[index] = fprc
16373	}
16374	return fprcArray, nil
16375}
16376
16377// MarshalJSON is the custom marshaler for FirewallPolicyRuleCollection.
16378func (fprc FirewallPolicyRuleCollection) MarshalJSON() ([]byte, error) {
16379	fprc.RuleCollectionType = RuleCollectionTypeFirewallPolicyRuleCollection
16380	objectMap := make(map[string]interface{})
16381	if fprc.Name != nil {
16382		objectMap["name"] = fprc.Name
16383	}
16384	if fprc.Priority != nil {
16385		objectMap["priority"] = fprc.Priority
16386	}
16387	if fprc.RuleCollectionType != "" {
16388		objectMap["ruleCollectionType"] = fprc.RuleCollectionType
16389	}
16390	return json.Marshal(objectMap)
16391}
16392
16393// AsFirewallPolicyNatRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyRuleCollection.
16394func (fprc FirewallPolicyRuleCollection) AsFirewallPolicyNatRuleCollection() (*FirewallPolicyNatRuleCollection, bool) {
16395	return nil, false
16396}
16397
16398// AsFirewallPolicyFilterRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyRuleCollection.
16399func (fprc FirewallPolicyRuleCollection) AsFirewallPolicyFilterRuleCollection() (*FirewallPolicyFilterRuleCollection, bool) {
16400	return nil, false
16401}
16402
16403// AsFirewallPolicyRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyRuleCollection.
16404func (fprc FirewallPolicyRuleCollection) AsFirewallPolicyRuleCollection() (*FirewallPolicyRuleCollection, bool) {
16405	return &fprc, true
16406}
16407
16408// AsBasicFirewallPolicyRuleCollection is the BasicFirewallPolicyRuleCollection implementation for FirewallPolicyRuleCollection.
16409func (fprc FirewallPolicyRuleCollection) AsBasicFirewallPolicyRuleCollection() (BasicFirewallPolicyRuleCollection, bool) {
16410	return &fprc, true
16411}
16412
16413// FirewallPolicyRuleCollectionGroup rule Collection Group resource.
16414type FirewallPolicyRuleCollectionGroup struct {
16415	autorest.Response `json:"-"`
16416	// FirewallPolicyRuleCollectionGroupProperties - The properties of the firewall policy rule collection group.
16417	*FirewallPolicyRuleCollectionGroupProperties `json:"properties,omitempty"`
16418	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16419	Name *string `json:"name,omitempty"`
16420	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16421	Etag *string `json:"etag,omitempty"`
16422	// Type - READ-ONLY; Rule Group type.
16423	Type *string `json:"type,omitempty"`
16424	// ID - Resource ID.
16425	ID *string `json:"id,omitempty"`
16426}
16427
16428// MarshalJSON is the custom marshaler for FirewallPolicyRuleCollectionGroup.
16429func (fprcg FirewallPolicyRuleCollectionGroup) MarshalJSON() ([]byte, error) {
16430	objectMap := make(map[string]interface{})
16431	if fprcg.FirewallPolicyRuleCollectionGroupProperties != nil {
16432		objectMap["properties"] = fprcg.FirewallPolicyRuleCollectionGroupProperties
16433	}
16434	if fprcg.Name != nil {
16435		objectMap["name"] = fprcg.Name
16436	}
16437	if fprcg.ID != nil {
16438		objectMap["id"] = fprcg.ID
16439	}
16440	return json.Marshal(objectMap)
16441}
16442
16443// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleCollectionGroup struct.
16444func (fprcg *FirewallPolicyRuleCollectionGroup) UnmarshalJSON(body []byte) error {
16445	var m map[string]*json.RawMessage
16446	err := json.Unmarshal(body, &m)
16447	if err != nil {
16448		return err
16449	}
16450	for k, v := range m {
16451		switch k {
16452		case "properties":
16453			if v != nil {
16454				var firewallPolicyRuleCollectionGroupProperties FirewallPolicyRuleCollectionGroupProperties
16455				err = json.Unmarshal(*v, &firewallPolicyRuleCollectionGroupProperties)
16456				if err != nil {
16457					return err
16458				}
16459				fprcg.FirewallPolicyRuleCollectionGroupProperties = &firewallPolicyRuleCollectionGroupProperties
16460			}
16461		case "name":
16462			if v != nil {
16463				var name string
16464				err = json.Unmarshal(*v, &name)
16465				if err != nil {
16466					return err
16467				}
16468				fprcg.Name = &name
16469			}
16470		case "etag":
16471			if v != nil {
16472				var etag string
16473				err = json.Unmarshal(*v, &etag)
16474				if err != nil {
16475					return err
16476				}
16477				fprcg.Etag = &etag
16478			}
16479		case "type":
16480			if v != nil {
16481				var typeVar string
16482				err = json.Unmarshal(*v, &typeVar)
16483				if err != nil {
16484					return err
16485				}
16486				fprcg.Type = &typeVar
16487			}
16488		case "id":
16489			if v != nil {
16490				var ID string
16491				err = json.Unmarshal(*v, &ID)
16492				if err != nil {
16493					return err
16494				}
16495				fprcg.ID = &ID
16496			}
16497		}
16498	}
16499
16500	return nil
16501}
16502
16503// FirewallPolicyRuleCollectionGroupListResult response for ListFirewallPolicyRuleCollectionGroups API
16504// service call.
16505type FirewallPolicyRuleCollectionGroupListResult struct {
16506	autorest.Response `json:"-"`
16507	// Value - List of FirewallPolicyRuleCollectionGroups in a FirewallPolicy.
16508	Value *[]FirewallPolicyRuleCollectionGroup `json:"value,omitempty"`
16509	// NextLink - URL to get the next set of results.
16510	NextLink *string `json:"nextLink,omitempty"`
16511}
16512
16513// FirewallPolicyRuleCollectionGroupListResultIterator provides access to a complete listing of
16514// FirewallPolicyRuleCollectionGroup values.
16515type FirewallPolicyRuleCollectionGroupListResultIterator struct {
16516	i    int
16517	page FirewallPolicyRuleCollectionGroupListResultPage
16518}
16519
16520// NextWithContext advances to the next value.  If there was an error making
16521// the request the iterator does not advance and the error is returned.
16522func (iter *FirewallPolicyRuleCollectionGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
16523	if tracing.IsEnabled() {
16524		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleCollectionGroupListResultIterator.NextWithContext")
16525		defer func() {
16526			sc := -1
16527			if iter.Response().Response.Response != nil {
16528				sc = iter.Response().Response.Response.StatusCode
16529			}
16530			tracing.EndSpan(ctx, sc, err)
16531		}()
16532	}
16533	iter.i++
16534	if iter.i < len(iter.page.Values()) {
16535		return nil
16536	}
16537	err = iter.page.NextWithContext(ctx)
16538	if err != nil {
16539		iter.i--
16540		return err
16541	}
16542	iter.i = 0
16543	return nil
16544}
16545
16546// Next advances to the next value.  If there was an error making
16547// the request the iterator does not advance and the error is returned.
16548// Deprecated: Use NextWithContext() instead.
16549func (iter *FirewallPolicyRuleCollectionGroupListResultIterator) Next() error {
16550	return iter.NextWithContext(context.Background())
16551}
16552
16553// NotDone returns true if the enumeration should be started or is not yet complete.
16554func (iter FirewallPolicyRuleCollectionGroupListResultIterator) NotDone() bool {
16555	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16556}
16557
16558// Response returns the raw server response from the last page request.
16559func (iter FirewallPolicyRuleCollectionGroupListResultIterator) Response() FirewallPolicyRuleCollectionGroupListResult {
16560	return iter.page.Response()
16561}
16562
16563// Value returns the current value or a zero-initialized value if the
16564// iterator has advanced beyond the end of the collection.
16565func (iter FirewallPolicyRuleCollectionGroupListResultIterator) Value() FirewallPolicyRuleCollectionGroup {
16566	if !iter.page.NotDone() {
16567		return FirewallPolicyRuleCollectionGroup{}
16568	}
16569	return iter.page.Values()[iter.i]
16570}
16571
16572// Creates a new instance of the FirewallPolicyRuleCollectionGroupListResultIterator type.
16573func NewFirewallPolicyRuleCollectionGroupListResultIterator(page FirewallPolicyRuleCollectionGroupListResultPage) FirewallPolicyRuleCollectionGroupListResultIterator {
16574	return FirewallPolicyRuleCollectionGroupListResultIterator{page: page}
16575}
16576
16577// IsEmpty returns true if the ListResult contains no values.
16578func (fprcglr FirewallPolicyRuleCollectionGroupListResult) IsEmpty() bool {
16579	return fprcglr.Value == nil || len(*fprcglr.Value) == 0
16580}
16581
16582// firewallPolicyRuleCollectionGroupListResultPreparer prepares a request to retrieve the next set of results.
16583// It returns nil if no more results exist.
16584func (fprcglr FirewallPolicyRuleCollectionGroupListResult) firewallPolicyRuleCollectionGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
16585	if fprcglr.NextLink == nil || len(to.String(fprcglr.NextLink)) < 1 {
16586		return nil, nil
16587	}
16588	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16589		autorest.AsJSON(),
16590		autorest.AsGet(),
16591		autorest.WithBaseURL(to.String(fprcglr.NextLink)))
16592}
16593
16594// FirewallPolicyRuleCollectionGroupListResultPage contains a page of FirewallPolicyRuleCollectionGroup
16595// values.
16596type FirewallPolicyRuleCollectionGroupListResultPage struct {
16597	fn      func(context.Context, FirewallPolicyRuleCollectionGroupListResult) (FirewallPolicyRuleCollectionGroupListResult, error)
16598	fprcglr FirewallPolicyRuleCollectionGroupListResult
16599}
16600
16601// NextWithContext advances to the next page of values.  If there was an error making
16602// the request the page does not advance and the error is returned.
16603func (page *FirewallPolicyRuleCollectionGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
16604	if tracing.IsEnabled() {
16605		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleCollectionGroupListResultPage.NextWithContext")
16606		defer func() {
16607			sc := -1
16608			if page.Response().Response.Response != nil {
16609				sc = page.Response().Response.Response.StatusCode
16610			}
16611			tracing.EndSpan(ctx, sc, err)
16612		}()
16613	}
16614	next, err := page.fn(ctx, page.fprcglr)
16615	if err != nil {
16616		return err
16617	}
16618	page.fprcglr = next
16619	return nil
16620}
16621
16622// Next advances to the next page of values.  If there was an error making
16623// the request the page does not advance and the error is returned.
16624// Deprecated: Use NextWithContext() instead.
16625func (page *FirewallPolicyRuleCollectionGroupListResultPage) Next() error {
16626	return page.NextWithContext(context.Background())
16627}
16628
16629// NotDone returns true if the page enumeration should be started or is not yet complete.
16630func (page FirewallPolicyRuleCollectionGroupListResultPage) NotDone() bool {
16631	return !page.fprcglr.IsEmpty()
16632}
16633
16634// Response returns the raw server response from the last page request.
16635func (page FirewallPolicyRuleCollectionGroupListResultPage) Response() FirewallPolicyRuleCollectionGroupListResult {
16636	return page.fprcglr
16637}
16638
16639// Values returns the slice of values for the current page or nil if there are no values.
16640func (page FirewallPolicyRuleCollectionGroupListResultPage) Values() []FirewallPolicyRuleCollectionGroup {
16641	if page.fprcglr.IsEmpty() {
16642		return nil
16643	}
16644	return *page.fprcglr.Value
16645}
16646
16647// Creates a new instance of the FirewallPolicyRuleCollectionGroupListResultPage type.
16648func NewFirewallPolicyRuleCollectionGroupListResultPage(getNextPage func(context.Context, FirewallPolicyRuleCollectionGroupListResult) (FirewallPolicyRuleCollectionGroupListResult, error)) FirewallPolicyRuleCollectionGroupListResultPage {
16649	return FirewallPolicyRuleCollectionGroupListResultPage{fn: getNextPage}
16650}
16651
16652// FirewallPolicyRuleCollectionGroupProperties properties of the rule collection group.
16653type FirewallPolicyRuleCollectionGroupProperties struct {
16654	// Priority - Priority of the Firewall Policy Rule Collection Group resource.
16655	Priority *int32 `json:"priority,omitempty"`
16656	// RuleCollections - Group of Firewall Policy rule collections.
16657	RuleCollections *[]BasicFirewallPolicyRuleCollection `json:"ruleCollections,omitempty"`
16658	// ProvisioningState - READ-ONLY; The provisioning state of the firewall policy rule collection group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16659	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16660}
16661
16662// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleCollectionGroupProperties struct.
16663func (fprcgp *FirewallPolicyRuleCollectionGroupProperties) UnmarshalJSON(body []byte) error {
16664	var m map[string]*json.RawMessage
16665	err := json.Unmarshal(body, &m)
16666	if err != nil {
16667		return err
16668	}
16669	for k, v := range m {
16670		switch k {
16671		case "priority":
16672			if v != nil {
16673				var priority int32
16674				err = json.Unmarshal(*v, &priority)
16675				if err != nil {
16676					return err
16677				}
16678				fprcgp.Priority = &priority
16679			}
16680		case "ruleCollections":
16681			if v != nil {
16682				ruleCollections, err := unmarshalBasicFirewallPolicyRuleCollectionArray(*v)
16683				if err != nil {
16684					return err
16685				}
16686				fprcgp.RuleCollections = &ruleCollections
16687			}
16688		case "provisioningState":
16689			if v != nil {
16690				var provisioningState ProvisioningState
16691				err = json.Unmarshal(*v, &provisioningState)
16692				if err != nil {
16693					return err
16694				}
16695				fprcgp.ProvisioningState = provisioningState
16696			}
16697		}
16698	}
16699
16700	return nil
16701}
16702
16703// FirewallPolicyRuleCollectionGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
16704// results of a long-running operation.
16705type FirewallPolicyRuleCollectionGroupsCreateOrUpdateFuture struct {
16706	azure.Future
16707}
16708
16709// Result returns the result of the asynchronous operation.
16710// If the operation has not completed it will return an error.
16711func (future *FirewallPolicyRuleCollectionGroupsCreateOrUpdateFuture) Result(client FirewallPolicyRuleCollectionGroupsClient) (fprcg FirewallPolicyRuleCollectionGroup, err error) {
16712	var done bool
16713	done, err = future.DoneWithContext(context.Background(), client)
16714	if err != nil {
16715		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleCollectionGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16716		return
16717	}
16718	if !done {
16719		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleCollectionGroupsCreateOrUpdateFuture")
16720		return
16721	}
16722	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16723	if fprcg.Response.Response, err = future.GetResult(sender); err == nil && fprcg.Response.Response.StatusCode != http.StatusNoContent {
16724		fprcg, err = client.CreateOrUpdateResponder(fprcg.Response.Response)
16725		if err != nil {
16726			err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleCollectionGroupsCreateOrUpdateFuture", "Result", fprcg.Response.Response, "Failure responding to request")
16727		}
16728	}
16729	return
16730}
16731
16732// FirewallPolicyRuleCollectionGroupsDeleteFuture an abstraction for monitoring and retrieving the results
16733// of a long-running operation.
16734type FirewallPolicyRuleCollectionGroupsDeleteFuture struct {
16735	azure.Future
16736}
16737
16738// Result returns the result of the asynchronous operation.
16739// If the operation has not completed it will return an error.
16740func (future *FirewallPolicyRuleCollectionGroupsDeleteFuture) Result(client FirewallPolicyRuleCollectionGroupsClient) (ar autorest.Response, err error) {
16741	var done bool
16742	done, err = future.DoneWithContext(context.Background(), client)
16743	if err != nil {
16744		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleCollectionGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
16745		return
16746	}
16747	if !done {
16748		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleCollectionGroupsDeleteFuture")
16749		return
16750	}
16751	ar.Response = future.Response()
16752	return
16753}
16754
16755// FirewallPolicyThreatIntelWhitelist threatIntel Whitelist for Firewall Policy.
16756type FirewallPolicyThreatIntelWhitelist struct {
16757	// IPAddresses - List of IP addresses for the ThreatIntel Whitelist.
16758	IPAddresses *[]string `json:"ipAddresses,omitempty"`
16759	// Fqdns - List of FQDNs for the ThreatIntel Whitelist.
16760	Fqdns *[]string `json:"fqdns,omitempty"`
16761}
16762
16763// FirewallPolicyTransportSecurity configuration needed to perform TLS termination & initiation.
16764type FirewallPolicyTransportSecurity struct {
16765	// CertificateAuthority - The CA used for intermediate CA generation.
16766	CertificateAuthority *FirewallPolicyCertificateAuthority `json:"certificateAuthority,omitempty"`
16767	// ExcludedDomains - List of domains which are excluded from TLS termination.
16768	ExcludedDomains *[]string `json:"excludedDomains,omitempty"`
16769	// TrustedRootCertificates - Certificates which are to be trusted by the firewall.
16770	TrustedRootCertificates *[]FirewallPolicyTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
16771}
16772
16773// FirewallPolicyTrustedRootCertificate trusted Root certificates of a firewall policy.
16774type FirewallPolicyTrustedRootCertificate struct {
16775	// FirewallPolicyTrustedRootCertificatePropertiesFormat - Properties of the trusted root authorities.
16776	*FirewallPolicyTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
16777	// Name - Name of the trusted root certificate that is unique within a firewall policy.
16778	Name *string `json:"name,omitempty"`
16779}
16780
16781// MarshalJSON is the custom marshaler for FirewallPolicyTrustedRootCertificate.
16782func (fptrc FirewallPolicyTrustedRootCertificate) MarshalJSON() ([]byte, error) {
16783	objectMap := make(map[string]interface{})
16784	if fptrc.FirewallPolicyTrustedRootCertificatePropertiesFormat != nil {
16785		objectMap["properties"] = fptrc.FirewallPolicyTrustedRootCertificatePropertiesFormat
16786	}
16787	if fptrc.Name != nil {
16788		objectMap["name"] = fptrc.Name
16789	}
16790	return json.Marshal(objectMap)
16791}
16792
16793// UnmarshalJSON is the custom unmarshaler for FirewallPolicyTrustedRootCertificate struct.
16794func (fptrc *FirewallPolicyTrustedRootCertificate) UnmarshalJSON(body []byte) error {
16795	var m map[string]*json.RawMessage
16796	err := json.Unmarshal(body, &m)
16797	if err != nil {
16798		return err
16799	}
16800	for k, v := range m {
16801		switch k {
16802		case "properties":
16803			if v != nil {
16804				var firewallPolicyTrustedRootCertificatePropertiesFormat FirewallPolicyTrustedRootCertificatePropertiesFormat
16805				err = json.Unmarshal(*v, &firewallPolicyTrustedRootCertificatePropertiesFormat)
16806				if err != nil {
16807					return err
16808				}
16809				fptrc.FirewallPolicyTrustedRootCertificatePropertiesFormat = &firewallPolicyTrustedRootCertificatePropertiesFormat
16810			}
16811		case "name":
16812			if v != nil {
16813				var name string
16814				err = json.Unmarshal(*v, &name)
16815				if err != nil {
16816					return err
16817				}
16818				fptrc.Name = &name
16819			}
16820		}
16821	}
16822
16823	return nil
16824}
16825
16826// FirewallPolicyTrustedRootCertificatePropertiesFormat trusted Root certificates properties for tls.
16827type FirewallPolicyTrustedRootCertificatePropertiesFormat struct {
16828	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) the public certificate data stored in KeyVault.
16829	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
16830}
16831
16832// FlowLog a flow log resource.
16833type FlowLog struct {
16834	autorest.Response `json:"-"`
16835	// FlowLogPropertiesFormat - Properties of the flow log.
16836	*FlowLogPropertiesFormat `json:"properties,omitempty"`
16837	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
16838	Etag *string `json:"etag,omitempty"`
16839	// ID - Resource ID.
16840	ID *string `json:"id,omitempty"`
16841	// Name - READ-ONLY; Resource name.
16842	Name *string `json:"name,omitempty"`
16843	// Type - READ-ONLY; Resource type.
16844	Type *string `json:"type,omitempty"`
16845	// Location - Resource location.
16846	Location *string `json:"location,omitempty"`
16847	// Tags - Resource tags.
16848	Tags map[string]*string `json:"tags"`
16849}
16850
16851// MarshalJSON is the custom marshaler for FlowLog.
16852func (fl FlowLog) MarshalJSON() ([]byte, error) {
16853	objectMap := make(map[string]interface{})
16854	if fl.FlowLogPropertiesFormat != nil {
16855		objectMap["properties"] = fl.FlowLogPropertiesFormat
16856	}
16857	if fl.ID != nil {
16858		objectMap["id"] = fl.ID
16859	}
16860	if fl.Location != nil {
16861		objectMap["location"] = fl.Location
16862	}
16863	if fl.Tags != nil {
16864		objectMap["tags"] = fl.Tags
16865	}
16866	return json.Marshal(objectMap)
16867}
16868
16869// UnmarshalJSON is the custom unmarshaler for FlowLog struct.
16870func (fl *FlowLog) UnmarshalJSON(body []byte) error {
16871	var m map[string]*json.RawMessage
16872	err := json.Unmarshal(body, &m)
16873	if err != nil {
16874		return err
16875	}
16876	for k, v := range m {
16877		switch k {
16878		case "properties":
16879			if v != nil {
16880				var flowLogPropertiesFormat FlowLogPropertiesFormat
16881				err = json.Unmarshal(*v, &flowLogPropertiesFormat)
16882				if err != nil {
16883					return err
16884				}
16885				fl.FlowLogPropertiesFormat = &flowLogPropertiesFormat
16886			}
16887		case "etag":
16888			if v != nil {
16889				var etag string
16890				err = json.Unmarshal(*v, &etag)
16891				if err != nil {
16892					return err
16893				}
16894				fl.Etag = &etag
16895			}
16896		case "id":
16897			if v != nil {
16898				var ID string
16899				err = json.Unmarshal(*v, &ID)
16900				if err != nil {
16901					return err
16902				}
16903				fl.ID = &ID
16904			}
16905		case "name":
16906			if v != nil {
16907				var name string
16908				err = json.Unmarshal(*v, &name)
16909				if err != nil {
16910					return err
16911				}
16912				fl.Name = &name
16913			}
16914		case "type":
16915			if v != nil {
16916				var typeVar string
16917				err = json.Unmarshal(*v, &typeVar)
16918				if err != nil {
16919					return err
16920				}
16921				fl.Type = &typeVar
16922			}
16923		case "location":
16924			if v != nil {
16925				var location string
16926				err = json.Unmarshal(*v, &location)
16927				if err != nil {
16928					return err
16929				}
16930				fl.Location = &location
16931			}
16932		case "tags":
16933			if v != nil {
16934				var tags map[string]*string
16935				err = json.Unmarshal(*v, &tags)
16936				if err != nil {
16937					return err
16938				}
16939				fl.Tags = tags
16940			}
16941		}
16942	}
16943
16944	return nil
16945}
16946
16947// FlowLogFormatParameters parameters that define the flow log format.
16948type FlowLogFormatParameters struct {
16949	// Type - The file type of flow log. Possible values include: 'JSON'
16950	Type FlowLogFormatType `json:"type,omitempty"`
16951	// Version - The version (revision) of the flow log.
16952	Version *int32 `json:"version,omitempty"`
16953}
16954
16955// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
16956type FlowLogInformation struct {
16957	autorest.Response `json:"-"`
16958	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
16959	TargetResourceID *string `json:"targetResourceId,omitempty"`
16960	// FlowLogProperties - Properties of the flow log.
16961	*FlowLogProperties `json:"properties,omitempty"`
16962	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
16963	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
16964}
16965
16966// MarshalJSON is the custom marshaler for FlowLogInformation.
16967func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
16968	objectMap := make(map[string]interface{})
16969	if fli.TargetResourceID != nil {
16970		objectMap["targetResourceId"] = fli.TargetResourceID
16971	}
16972	if fli.FlowLogProperties != nil {
16973		objectMap["properties"] = fli.FlowLogProperties
16974	}
16975	if fli.FlowAnalyticsConfiguration != nil {
16976		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
16977	}
16978	return json.Marshal(objectMap)
16979}
16980
16981// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
16982func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
16983	var m map[string]*json.RawMessage
16984	err := json.Unmarshal(body, &m)
16985	if err != nil {
16986		return err
16987	}
16988	for k, v := range m {
16989		switch k {
16990		case "targetResourceId":
16991			if v != nil {
16992				var targetResourceID string
16993				err = json.Unmarshal(*v, &targetResourceID)
16994				if err != nil {
16995					return err
16996				}
16997				fli.TargetResourceID = &targetResourceID
16998			}
16999		case "properties":
17000			if v != nil {
17001				var flowLogProperties FlowLogProperties
17002				err = json.Unmarshal(*v, &flowLogProperties)
17003				if err != nil {
17004					return err
17005				}
17006				fli.FlowLogProperties = &flowLogProperties
17007			}
17008		case "flowAnalyticsConfiguration":
17009			if v != nil {
17010				var flowAnalyticsConfiguration TrafficAnalyticsProperties
17011				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
17012				if err != nil {
17013					return err
17014				}
17015				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
17016			}
17017		}
17018	}
17019
17020	return nil
17021}
17022
17023// FlowLogListResult list of flow logs.
17024type FlowLogListResult struct {
17025	autorest.Response `json:"-"`
17026	// Value - Information about flow log resource.
17027	Value *[]FlowLog `json:"value,omitempty"`
17028	// NextLink - READ-ONLY; The URL to get the next set of results.
17029	NextLink *string `json:"nextLink,omitempty"`
17030}
17031
17032// FlowLogListResultIterator provides access to a complete listing of FlowLog values.
17033type FlowLogListResultIterator struct {
17034	i    int
17035	page FlowLogListResultPage
17036}
17037
17038// NextWithContext advances to the next value.  If there was an error making
17039// the request the iterator does not advance and the error is returned.
17040func (iter *FlowLogListResultIterator) NextWithContext(ctx context.Context) (err error) {
17041	if tracing.IsEnabled() {
17042		ctx = tracing.StartSpan(ctx, fqdn+"/FlowLogListResultIterator.NextWithContext")
17043		defer func() {
17044			sc := -1
17045			if iter.Response().Response.Response != nil {
17046				sc = iter.Response().Response.Response.StatusCode
17047			}
17048			tracing.EndSpan(ctx, sc, err)
17049		}()
17050	}
17051	iter.i++
17052	if iter.i < len(iter.page.Values()) {
17053		return nil
17054	}
17055	err = iter.page.NextWithContext(ctx)
17056	if err != nil {
17057		iter.i--
17058		return err
17059	}
17060	iter.i = 0
17061	return nil
17062}
17063
17064// Next advances to the next value.  If there was an error making
17065// the request the iterator does not advance and the error is returned.
17066// Deprecated: Use NextWithContext() instead.
17067func (iter *FlowLogListResultIterator) Next() error {
17068	return iter.NextWithContext(context.Background())
17069}
17070
17071// NotDone returns true if the enumeration should be started or is not yet complete.
17072func (iter FlowLogListResultIterator) NotDone() bool {
17073	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17074}
17075
17076// Response returns the raw server response from the last page request.
17077func (iter FlowLogListResultIterator) Response() FlowLogListResult {
17078	return iter.page.Response()
17079}
17080
17081// Value returns the current value or a zero-initialized value if the
17082// iterator has advanced beyond the end of the collection.
17083func (iter FlowLogListResultIterator) Value() FlowLog {
17084	if !iter.page.NotDone() {
17085		return FlowLog{}
17086	}
17087	return iter.page.Values()[iter.i]
17088}
17089
17090// Creates a new instance of the FlowLogListResultIterator type.
17091func NewFlowLogListResultIterator(page FlowLogListResultPage) FlowLogListResultIterator {
17092	return FlowLogListResultIterator{page: page}
17093}
17094
17095// IsEmpty returns true if the ListResult contains no values.
17096func (fllr FlowLogListResult) IsEmpty() bool {
17097	return fllr.Value == nil || len(*fllr.Value) == 0
17098}
17099
17100// flowLogListResultPreparer prepares a request to retrieve the next set of results.
17101// It returns nil if no more results exist.
17102func (fllr FlowLogListResult) flowLogListResultPreparer(ctx context.Context) (*http.Request, error) {
17103	if fllr.NextLink == nil || len(to.String(fllr.NextLink)) < 1 {
17104		return nil, nil
17105	}
17106	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17107		autorest.AsJSON(),
17108		autorest.AsGet(),
17109		autorest.WithBaseURL(to.String(fllr.NextLink)))
17110}
17111
17112// FlowLogListResultPage contains a page of FlowLog values.
17113type FlowLogListResultPage struct {
17114	fn   func(context.Context, FlowLogListResult) (FlowLogListResult, error)
17115	fllr FlowLogListResult
17116}
17117
17118// NextWithContext advances to the next page of values.  If there was an error making
17119// the request the page does not advance and the error is returned.
17120func (page *FlowLogListResultPage) NextWithContext(ctx context.Context) (err error) {
17121	if tracing.IsEnabled() {
17122		ctx = tracing.StartSpan(ctx, fqdn+"/FlowLogListResultPage.NextWithContext")
17123		defer func() {
17124			sc := -1
17125			if page.Response().Response.Response != nil {
17126				sc = page.Response().Response.Response.StatusCode
17127			}
17128			tracing.EndSpan(ctx, sc, err)
17129		}()
17130	}
17131	next, err := page.fn(ctx, page.fllr)
17132	if err != nil {
17133		return err
17134	}
17135	page.fllr = next
17136	return nil
17137}
17138
17139// Next advances to the next page of values.  If there was an error making
17140// the request the page does not advance and the error is returned.
17141// Deprecated: Use NextWithContext() instead.
17142func (page *FlowLogListResultPage) Next() error {
17143	return page.NextWithContext(context.Background())
17144}
17145
17146// NotDone returns true if the page enumeration should be started or is not yet complete.
17147func (page FlowLogListResultPage) NotDone() bool {
17148	return !page.fllr.IsEmpty()
17149}
17150
17151// Response returns the raw server response from the last page request.
17152func (page FlowLogListResultPage) Response() FlowLogListResult {
17153	return page.fllr
17154}
17155
17156// Values returns the slice of values for the current page or nil if there are no values.
17157func (page FlowLogListResultPage) Values() []FlowLog {
17158	if page.fllr.IsEmpty() {
17159		return nil
17160	}
17161	return *page.fllr.Value
17162}
17163
17164// Creates a new instance of the FlowLogListResultPage type.
17165func NewFlowLogListResultPage(getNextPage func(context.Context, FlowLogListResult) (FlowLogListResult, error)) FlowLogListResultPage {
17166	return FlowLogListResultPage{fn: getNextPage}
17167}
17168
17169// FlowLogProperties parameters that define the configuration of flow log.
17170type FlowLogProperties struct {
17171	// StorageID - ID of the storage account which is used to store the flow log.
17172	StorageID *string `json:"storageId,omitempty"`
17173	// Enabled - Flag to enable/disable flow logging.
17174	Enabled *bool `json:"enabled,omitempty"`
17175	// RetentionPolicy - Parameters that define the retention policy for flow log.
17176	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
17177	// Format - Parameters that define the flow log format.
17178	Format *FlowLogFormatParameters `json:"format,omitempty"`
17179}
17180
17181// FlowLogPropertiesFormat parameters that define the configuration of flow log.
17182type FlowLogPropertiesFormat struct {
17183	// TargetResourceID - ID of network security group to which flow log will be applied.
17184	TargetResourceID *string `json:"targetResourceId,omitempty"`
17185	// TargetResourceGUID - READ-ONLY; Guid of network security group to which flow log will be applied.
17186	TargetResourceGUID *string `json:"targetResourceGuid,omitempty"`
17187	// StorageID - ID of the storage account which is used to store the flow log.
17188	StorageID *string `json:"storageId,omitempty"`
17189	// Enabled - Flag to enable/disable flow logging.
17190	Enabled *bool `json:"enabled,omitempty"`
17191	// RetentionPolicy - Parameters that define the retention policy for flow log.
17192	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
17193	// Format - Parameters that define the flow log format.
17194	Format *FlowLogFormatParameters `json:"format,omitempty"`
17195	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
17196	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
17197	// ProvisioningState - READ-ONLY; The provisioning state of the flow log. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17198	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17199}
17200
17201// FlowLogsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
17202// operation.
17203type FlowLogsCreateOrUpdateFuture struct {
17204	azure.Future
17205}
17206
17207// Result returns the result of the asynchronous operation.
17208// If the operation has not completed it will return an error.
17209func (future *FlowLogsCreateOrUpdateFuture) Result(client FlowLogsClient) (fl FlowLog, err error) {
17210	var done bool
17211	done, err = future.DoneWithContext(context.Background(), client)
17212	if err != nil {
17213		err = autorest.NewErrorWithError(err, "network.FlowLogsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17214		return
17215	}
17216	if !done {
17217		err = azure.NewAsyncOpIncompleteError("network.FlowLogsCreateOrUpdateFuture")
17218		return
17219	}
17220	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17221	if fl.Response.Response, err = future.GetResult(sender); err == nil && fl.Response.Response.StatusCode != http.StatusNoContent {
17222		fl, err = client.CreateOrUpdateResponder(fl.Response.Response)
17223		if err != nil {
17224			err = autorest.NewErrorWithError(err, "network.FlowLogsCreateOrUpdateFuture", "Result", fl.Response.Response, "Failure responding to request")
17225		}
17226	}
17227	return
17228}
17229
17230// FlowLogsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17231// operation.
17232type FlowLogsDeleteFuture struct {
17233	azure.Future
17234}
17235
17236// Result returns the result of the asynchronous operation.
17237// If the operation has not completed it will return an error.
17238func (future *FlowLogsDeleteFuture) Result(client FlowLogsClient) (ar autorest.Response, err error) {
17239	var done bool
17240	done, err = future.DoneWithContext(context.Background(), client)
17241	if err != nil {
17242		err = autorest.NewErrorWithError(err, "network.FlowLogsDeleteFuture", "Result", future.Response(), "Polling failure")
17243		return
17244	}
17245	if !done {
17246		err = azure.NewAsyncOpIncompleteError("network.FlowLogsDeleteFuture")
17247		return
17248	}
17249	ar.Response = future.Response()
17250	return
17251}
17252
17253// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
17254// (optional) status.
17255type FlowLogStatusParameters struct {
17256	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
17257	TargetResourceID *string `json:"targetResourceId,omitempty"`
17258}
17259
17260// FrontendIPConfiguration frontend IP address of the load balancer.
17261type FrontendIPConfiguration struct {
17262	autorest.Response `json:"-"`
17263	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
17264	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
17265	// Name - The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource.
17266	Name *string `json:"name,omitempty"`
17267	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
17268	Etag *string `json:"etag,omitempty"`
17269	// Type - READ-ONLY; Type of the resource.
17270	Type *string `json:"type,omitempty"`
17271	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
17272	Zones *[]string `json:"zones,omitempty"`
17273	// ID - Resource ID.
17274	ID *string `json:"id,omitempty"`
17275}
17276
17277// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
17278func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
17279	objectMap := make(map[string]interface{})
17280	if fic.FrontendIPConfigurationPropertiesFormat != nil {
17281		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
17282	}
17283	if fic.Name != nil {
17284		objectMap["name"] = fic.Name
17285	}
17286	if fic.Zones != nil {
17287		objectMap["zones"] = fic.Zones
17288	}
17289	if fic.ID != nil {
17290		objectMap["id"] = fic.ID
17291	}
17292	return json.Marshal(objectMap)
17293}
17294
17295// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
17296func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
17297	var m map[string]*json.RawMessage
17298	err := json.Unmarshal(body, &m)
17299	if err != nil {
17300		return err
17301	}
17302	for k, v := range m {
17303		switch k {
17304		case "properties":
17305			if v != nil {
17306				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
17307				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
17308				if err != nil {
17309					return err
17310				}
17311				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
17312			}
17313		case "name":
17314			if v != nil {
17315				var name string
17316				err = json.Unmarshal(*v, &name)
17317				if err != nil {
17318					return err
17319				}
17320				fic.Name = &name
17321			}
17322		case "etag":
17323			if v != nil {
17324				var etag string
17325				err = json.Unmarshal(*v, &etag)
17326				if err != nil {
17327					return err
17328				}
17329				fic.Etag = &etag
17330			}
17331		case "type":
17332			if v != nil {
17333				var typeVar string
17334				err = json.Unmarshal(*v, &typeVar)
17335				if err != nil {
17336					return err
17337				}
17338				fic.Type = &typeVar
17339			}
17340		case "zones":
17341			if v != nil {
17342				var zones []string
17343				err = json.Unmarshal(*v, &zones)
17344				if err != nil {
17345					return err
17346				}
17347				fic.Zones = &zones
17348			}
17349		case "id":
17350			if v != nil {
17351				var ID string
17352				err = json.Unmarshal(*v, &ID)
17353				if err != nil {
17354					return err
17355				}
17356				fic.ID = &ID
17357			}
17358		}
17359	}
17360
17361	return nil
17362}
17363
17364// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
17365type FrontendIPConfigurationPropertiesFormat struct {
17366	// InboundNatRules - READ-ONLY; An array of references to inbound rules that use this frontend IP.
17367	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
17368	// InboundNatPools - READ-ONLY; An array of references to inbound pools that use this frontend IP.
17369	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
17370	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this frontend IP.
17371	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
17372	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this frontend IP.
17373	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
17374	// PrivateIPAddress - The private IP address of the IP configuration.
17375	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
17376	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
17377	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
17378	// PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
17379	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
17380	// Subnet - The reference to the subnet resource.
17381	Subnet *Subnet `json:"subnet,omitempty"`
17382	// PublicIPAddress - The reference to the Public IP resource.
17383	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
17384	// PublicIPPrefix - The reference to the Public IP Prefix resource.
17385	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
17386	// ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17387	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17388}
17389
17390// GatewayRoute gateway routing details.
17391type GatewayRoute struct {
17392	// LocalAddress - READ-ONLY; The gateway's local address.
17393	LocalAddress *string `json:"localAddress,omitempty"`
17394	// NetworkProperty - READ-ONLY; The route's network prefix.
17395	NetworkProperty *string `json:"network,omitempty"`
17396	// NextHop - READ-ONLY; The route's next hop.
17397	NextHop *string `json:"nextHop,omitempty"`
17398	// SourcePeer - READ-ONLY; The peer this route was learned from.
17399	SourcePeer *string `json:"sourcePeer,omitempty"`
17400	// Origin - READ-ONLY; The source this route was learned from.
17401	Origin *string `json:"origin,omitempty"`
17402	// AsPath - READ-ONLY; The route's AS path sequence.
17403	AsPath *string `json:"asPath,omitempty"`
17404	// Weight - READ-ONLY; The route's weight.
17405	Weight *int32 `json:"weight,omitempty"`
17406}
17407
17408// GatewayRouteListResult list of virtual network gateway routes.
17409type GatewayRouteListResult struct {
17410	autorest.Response `json:"-"`
17411	// Value - List of gateway routes.
17412	Value *[]GatewayRoute `json:"value,omitempty"`
17413}
17414
17415// GeneratevirtualwanvpnserverconfigurationvpnprofileFuture an abstraction for monitoring and retrieving
17416// the results of a long-running operation.
17417type GeneratevirtualwanvpnserverconfigurationvpnprofileFuture struct {
17418	azure.Future
17419}
17420
17421// Result returns the result of the asynchronous operation.
17422// If the operation has not completed it will return an error.
17423func (future *GeneratevirtualwanvpnserverconfigurationvpnprofileFuture) Result(client BaseClient) (vpr VpnProfileResponse, err error) {
17424	var done bool
17425	done, err = future.DoneWithContext(context.Background(), client)
17426	if err != nil {
17427		err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", future.Response(), "Polling failure")
17428		return
17429	}
17430	if !done {
17431		err = azure.NewAsyncOpIncompleteError("network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture")
17432		return
17433	}
17434	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17435	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
17436		vpr, err = client.GeneratevirtualwanvpnserverconfigurationvpnprofileResponder(vpr.Response.Response)
17437		if err != nil {
17438			err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", vpr.Response.Response, "Failure responding to request")
17439		}
17440	}
17441	return
17442}
17443
17444// GetActiveSessionsAllFuture an abstraction for monitoring and retrieving the results of a long-running
17445// operation.
17446type GetActiveSessionsAllFuture struct {
17447	azure.Future
17448}
17449
17450// Result returns the result of the asynchronous operation.
17451// If the operation has not completed it will return an error.
17452func (future *GetActiveSessionsAllFuture) Result(client BaseClient) (baslrp BastionActiveSessionListResultPage, err error) {
17453	var done bool
17454	done, err = future.DoneWithContext(context.Background(), client)
17455	if err != nil {
17456		err = autorest.NewErrorWithError(err, "network.GetActiveSessionsAllFuture", "Result", future.Response(), "Polling failure")
17457		return
17458	}
17459	if !done {
17460		err = azure.NewAsyncOpIncompleteError("network.GetActiveSessionsAllFuture")
17461		return
17462	}
17463	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17464	if baslrp.baslr.Response.Response, err = future.GetResult(sender); err == nil && baslrp.baslr.Response.Response.StatusCode != http.StatusNoContent {
17465		baslrp, err = client.GetActiveSessionsResponder(baslrp.baslr.Response.Response)
17466		if err != nil {
17467			err = autorest.NewErrorWithError(err, "network.GetActiveSessionsAllFuture", "Result", baslrp.baslr.Response.Response, "Failure responding to request")
17468		}
17469	}
17470	return
17471}
17472
17473// GetActiveSessionsFuture an abstraction for monitoring and retrieving the results of a long-running
17474// operation.
17475type GetActiveSessionsFuture struct {
17476	azure.Future
17477}
17478
17479// Result returns the result of the asynchronous operation.
17480// If the operation has not completed it will return an error.
17481func (future *GetActiveSessionsFuture) Result(client BaseClient) (baslrp BastionActiveSessionListResultPage, err error) {
17482	var done bool
17483	done, err = future.DoneWithContext(context.Background(), client)
17484	if err != nil {
17485		err = autorest.NewErrorWithError(err, "network.GetActiveSessionsFuture", "Result", future.Response(), "Polling failure")
17486		return
17487	}
17488	if !done {
17489		err = azure.NewAsyncOpIncompleteError("network.GetActiveSessionsFuture")
17490		return
17491	}
17492	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17493	if baslrp.baslr.Response.Response, err = future.GetResult(sender); err == nil && baslrp.baslr.Response.Response.StatusCode != http.StatusNoContent {
17494		baslrp, err = client.GetActiveSessionsResponder(baslrp.baslr.Response.Response)
17495		if err != nil {
17496			err = autorest.NewErrorWithError(err, "network.GetActiveSessionsFuture", "Result", baslrp.baslr.Response.Response, "Failure responding to request")
17497		}
17498	}
17499	return
17500}
17501
17502// GetVpnSitesConfigurationRequest list of Vpn-Sites.
17503type GetVpnSitesConfigurationRequest struct {
17504	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
17505	VpnSites *[]string `json:"vpnSites,omitempty"`
17506	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites.
17507	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
17508}
17509
17510// HopLink hop link.
17511type HopLink struct {
17512	// NextHopID - READ-ONLY; The ID of the next hop.
17513	NextHopID *string `json:"nextHopId,omitempty"`
17514	// LinkType - READ-ONLY; Link type.
17515	LinkType *string `json:"linkType,omitempty"`
17516	// HopLinkProperties - Hop link properties.
17517	*HopLinkProperties `json:"properties,omitempty"`
17518	// Issues - READ-ONLY; List of issues.
17519	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
17520	// Context - READ-ONLY; Provides additional context on the issue.
17521	Context *[]map[string]*string `json:"context,omitempty"`
17522	// ResourceID - READ-ONLY; Resource ID.
17523	ResourceID *string `json:"resourceId,omitempty"`
17524}
17525
17526// MarshalJSON is the custom marshaler for HopLink.
17527func (hl HopLink) MarshalJSON() ([]byte, error) {
17528	objectMap := make(map[string]interface{})
17529	if hl.HopLinkProperties != nil {
17530		objectMap["properties"] = hl.HopLinkProperties
17531	}
17532	return json.Marshal(objectMap)
17533}
17534
17535// UnmarshalJSON is the custom unmarshaler for HopLink struct.
17536func (hl *HopLink) UnmarshalJSON(body []byte) error {
17537	var m map[string]*json.RawMessage
17538	err := json.Unmarshal(body, &m)
17539	if err != nil {
17540		return err
17541	}
17542	for k, v := range m {
17543		switch k {
17544		case "nextHopId":
17545			if v != nil {
17546				var nextHopID string
17547				err = json.Unmarshal(*v, &nextHopID)
17548				if err != nil {
17549					return err
17550				}
17551				hl.NextHopID = &nextHopID
17552			}
17553		case "linkType":
17554			if v != nil {
17555				var linkType string
17556				err = json.Unmarshal(*v, &linkType)
17557				if err != nil {
17558					return err
17559				}
17560				hl.LinkType = &linkType
17561			}
17562		case "properties":
17563			if v != nil {
17564				var hopLinkProperties HopLinkProperties
17565				err = json.Unmarshal(*v, &hopLinkProperties)
17566				if err != nil {
17567					return err
17568				}
17569				hl.HopLinkProperties = &hopLinkProperties
17570			}
17571		case "issues":
17572			if v != nil {
17573				var issues []ConnectivityIssue
17574				err = json.Unmarshal(*v, &issues)
17575				if err != nil {
17576					return err
17577				}
17578				hl.Issues = &issues
17579			}
17580		case "context":
17581			if v != nil {
17582				var context []map[string]*string
17583				err = json.Unmarshal(*v, &context)
17584				if err != nil {
17585					return err
17586				}
17587				hl.Context = &context
17588			}
17589		case "resourceId":
17590			if v != nil {
17591				var resourceID string
17592				err = json.Unmarshal(*v, &resourceID)
17593				if err != nil {
17594					return err
17595				}
17596				hl.ResourceID = &resourceID
17597			}
17598		}
17599	}
17600
17601	return nil
17602}
17603
17604// HopLinkProperties hop link properties.
17605type HopLinkProperties struct {
17606	// RoundTripTimeMin - READ-ONLY; Minimum roundtrip time in milliseconds.
17607	RoundTripTimeMin *int32 `json:"roundTripTimeMin,omitempty"`
17608	// RoundTripTimeAvg - READ-ONLY; Average roundtrip time in milliseconds.
17609	RoundTripTimeAvg *int32 `json:"roundTripTimeAvg,omitempty"`
17610	// RoundTripTimeMax - READ-ONLY; Maximum roundtrip time in milliseconds.
17611	RoundTripTimeMax *int32 `json:"roundTripTimeMax,omitempty"`
17612}
17613
17614// HTTPConfiguration HTTP configuration of the connectivity check.
17615type HTTPConfiguration struct {
17616	// Method - HTTP method. Possible values include: 'HTTPMethodGet'
17617	Method HTTPMethod `json:"method,omitempty"`
17618	// Headers - List of HTTP headers.
17619	Headers *[]HTTPHeader `json:"headers,omitempty"`
17620	// ValidStatusCodes - Valid status codes.
17621	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
17622}
17623
17624// HTTPHeader the HTTP header.
17625type HTTPHeader struct {
17626	// Name - The name in HTTP header.
17627	Name *string `json:"name,omitempty"`
17628	// Value - The value in HTTP header.
17629	Value *string `json:"value,omitempty"`
17630}
17631
17632// HubIPAddresses IP addresses associated with azure firewall.
17633type HubIPAddresses struct {
17634	// PublicIPs - Public IP addresses associated with azure firewall.
17635	PublicIPs *HubPublicIPAddresses `json:"publicIPs,omitempty"`
17636	// PrivateIPAddress - Private IP Address associated with azure firewall.
17637	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
17638}
17639
17640// HubIPConfiguration ipConfigurations.
17641type HubIPConfiguration struct {
17642	autorest.Response `json:"-"`
17643	// HubIPConfigurationPropertiesFormat - The properties of the Virtual Hub IPConfigurations.
17644	*HubIPConfigurationPropertiesFormat `json:"properties,omitempty"`
17645	// Name - Name of the Ip Configuration.
17646	Name *string `json:"name,omitempty"`
17647	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
17648	Etag *string `json:"etag,omitempty"`
17649	// Type - READ-ONLY; Ipconfiguration type.
17650	Type *string `json:"type,omitempty"`
17651	// ID - Resource ID.
17652	ID *string `json:"id,omitempty"`
17653}
17654
17655// MarshalJSON is the custom marshaler for HubIPConfiguration.
17656func (hic HubIPConfiguration) MarshalJSON() ([]byte, error) {
17657	objectMap := make(map[string]interface{})
17658	if hic.HubIPConfigurationPropertiesFormat != nil {
17659		objectMap["properties"] = hic.HubIPConfigurationPropertiesFormat
17660	}
17661	if hic.Name != nil {
17662		objectMap["name"] = hic.Name
17663	}
17664	if hic.ID != nil {
17665		objectMap["id"] = hic.ID
17666	}
17667	return json.Marshal(objectMap)
17668}
17669
17670// UnmarshalJSON is the custom unmarshaler for HubIPConfiguration struct.
17671func (hic *HubIPConfiguration) UnmarshalJSON(body []byte) error {
17672	var m map[string]*json.RawMessage
17673	err := json.Unmarshal(body, &m)
17674	if err != nil {
17675		return err
17676	}
17677	for k, v := range m {
17678		switch k {
17679		case "properties":
17680			if v != nil {
17681				var hubIPConfigurationPropertiesFormat HubIPConfigurationPropertiesFormat
17682				err = json.Unmarshal(*v, &hubIPConfigurationPropertiesFormat)
17683				if err != nil {
17684					return err
17685				}
17686				hic.HubIPConfigurationPropertiesFormat = &hubIPConfigurationPropertiesFormat
17687			}
17688		case "name":
17689			if v != nil {
17690				var name string
17691				err = json.Unmarshal(*v, &name)
17692				if err != nil {
17693					return err
17694				}
17695				hic.Name = &name
17696			}
17697		case "etag":
17698			if v != nil {
17699				var etag string
17700				err = json.Unmarshal(*v, &etag)
17701				if err != nil {
17702					return err
17703				}
17704				hic.Etag = &etag
17705			}
17706		case "type":
17707			if v != nil {
17708				var typeVar string
17709				err = json.Unmarshal(*v, &typeVar)
17710				if err != nil {
17711					return err
17712				}
17713				hic.Type = &typeVar
17714			}
17715		case "id":
17716			if v != nil {
17717				var ID string
17718				err = json.Unmarshal(*v, &ID)
17719				if err != nil {
17720					return err
17721				}
17722				hic.ID = &ID
17723			}
17724		}
17725	}
17726
17727	return nil
17728}
17729
17730// HubIPConfigurationPropertiesFormat properties of IP configuration.
17731type HubIPConfigurationPropertiesFormat struct {
17732	// PrivateIPAddress - The private IP address of the IP configuration.
17733	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
17734	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
17735	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
17736	// Subnet - The reference to the subnet resource.
17737	Subnet *Subnet `json:"subnet,omitempty"`
17738	// PublicIPAddress - The reference to the public IP resource.
17739	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
17740	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17741	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17742}
17743
17744// HubPublicIPAddresses public IP addresses associated with azure firewall.
17745type HubPublicIPAddresses struct {
17746	// Addresses - The number of Public IP addresses associated with azure firewall.
17747	Addresses *[]AzureFirewallPublicIPAddress `json:"addresses,omitempty"`
17748	// Count - Private IP Address associated with azure firewall.
17749	Count *int32 `json:"count,omitempty"`
17750}
17751
17752// HubRoute routeTable route.
17753type HubRoute struct {
17754	// Name - The name of the Route that is unique within a RouteTable. This name can be used to access this route.
17755	Name *string `json:"name,omitempty"`
17756	// DestinationType - The type of destinations (eg: CIDR, ResourceId, Service).
17757	DestinationType *string `json:"destinationType,omitempty"`
17758	// Destinations - List of all destinations.
17759	Destinations *[]string `json:"destinations,omitempty"`
17760	// NextHopType - The type of next hop (eg: ResourceId).
17761	NextHopType *string `json:"nextHopType,omitempty"`
17762	// NextHop - NextHop resource ID.
17763	NextHop *string `json:"nextHop,omitempty"`
17764}
17765
17766// HubRouteTable routeTable resource in a virtual hub.
17767type HubRouteTable struct {
17768	autorest.Response `json:"-"`
17769	// HubRouteTableProperties - Properties of the RouteTable resource.
17770	*HubRouteTableProperties `json:"properties,omitempty"`
17771	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17772	Name *string `json:"name,omitempty"`
17773	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
17774	Etag *string `json:"etag,omitempty"`
17775	// Type - READ-ONLY; Resource type.
17776	Type *string `json:"type,omitempty"`
17777	// ID - Resource ID.
17778	ID *string `json:"id,omitempty"`
17779}
17780
17781// MarshalJSON is the custom marshaler for HubRouteTable.
17782func (hrt HubRouteTable) MarshalJSON() ([]byte, error) {
17783	objectMap := make(map[string]interface{})
17784	if hrt.HubRouteTableProperties != nil {
17785		objectMap["properties"] = hrt.HubRouteTableProperties
17786	}
17787	if hrt.Name != nil {
17788		objectMap["name"] = hrt.Name
17789	}
17790	if hrt.ID != nil {
17791		objectMap["id"] = hrt.ID
17792	}
17793	return json.Marshal(objectMap)
17794}
17795
17796// UnmarshalJSON is the custom unmarshaler for HubRouteTable struct.
17797func (hrt *HubRouteTable) UnmarshalJSON(body []byte) error {
17798	var m map[string]*json.RawMessage
17799	err := json.Unmarshal(body, &m)
17800	if err != nil {
17801		return err
17802	}
17803	for k, v := range m {
17804		switch k {
17805		case "properties":
17806			if v != nil {
17807				var hubRouteTableProperties HubRouteTableProperties
17808				err = json.Unmarshal(*v, &hubRouteTableProperties)
17809				if err != nil {
17810					return err
17811				}
17812				hrt.HubRouteTableProperties = &hubRouteTableProperties
17813			}
17814		case "name":
17815			if v != nil {
17816				var name string
17817				err = json.Unmarshal(*v, &name)
17818				if err != nil {
17819					return err
17820				}
17821				hrt.Name = &name
17822			}
17823		case "etag":
17824			if v != nil {
17825				var etag string
17826				err = json.Unmarshal(*v, &etag)
17827				if err != nil {
17828					return err
17829				}
17830				hrt.Etag = &etag
17831			}
17832		case "type":
17833			if v != nil {
17834				var typeVar string
17835				err = json.Unmarshal(*v, &typeVar)
17836				if err != nil {
17837					return err
17838				}
17839				hrt.Type = &typeVar
17840			}
17841		case "id":
17842			if v != nil {
17843				var ID string
17844				err = json.Unmarshal(*v, &ID)
17845				if err != nil {
17846					return err
17847				}
17848				hrt.ID = &ID
17849			}
17850		}
17851	}
17852
17853	return nil
17854}
17855
17856// HubRouteTableProperties parameters for RouteTable.
17857type HubRouteTableProperties struct {
17858	// Routes - List of all routes.
17859	Routes *[]HubRoute `json:"routes,omitempty"`
17860	// Labels - List of labels associated with this route table.
17861	Labels *[]string `json:"labels,omitempty"`
17862	// AssociatedConnections - READ-ONLY; List of all connections associated with this route table.
17863	AssociatedConnections *[]SubResource `json:"associatedConnections,omitempty"`
17864	// PropagatingConnections - READ-ONLY; List of all connections that advertise to this route table.
17865	PropagatingConnections *[]SubResource `json:"propagatingConnections,omitempty"`
17866	// ProvisioningState - READ-ONLY; The provisioning state of the RouteTable resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
17867	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
17868}
17869
17870// HubRouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
17871// long-running operation.
17872type HubRouteTablesCreateOrUpdateFuture struct {
17873	azure.Future
17874}
17875
17876// Result returns the result of the asynchronous operation.
17877// If the operation has not completed it will return an error.
17878func (future *HubRouteTablesCreateOrUpdateFuture) Result(client HubRouteTablesClient) (hrt HubRouteTable, err error) {
17879	var done bool
17880	done, err = future.DoneWithContext(context.Background(), client)
17881	if err != nil {
17882		err = autorest.NewErrorWithError(err, "network.HubRouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
17883		return
17884	}
17885	if !done {
17886		err = azure.NewAsyncOpIncompleteError("network.HubRouteTablesCreateOrUpdateFuture")
17887		return
17888	}
17889	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
17890	if hrt.Response.Response, err = future.GetResult(sender); err == nil && hrt.Response.Response.StatusCode != http.StatusNoContent {
17891		hrt, err = client.CreateOrUpdateResponder(hrt.Response.Response)
17892		if err != nil {
17893			err = autorest.NewErrorWithError(err, "network.HubRouteTablesCreateOrUpdateFuture", "Result", hrt.Response.Response, "Failure responding to request")
17894		}
17895	}
17896	return
17897}
17898
17899// HubRouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
17900// operation.
17901type HubRouteTablesDeleteFuture struct {
17902	azure.Future
17903}
17904
17905// Result returns the result of the asynchronous operation.
17906// If the operation has not completed it will return an error.
17907func (future *HubRouteTablesDeleteFuture) Result(client HubRouteTablesClient) (ar autorest.Response, err error) {
17908	var done bool
17909	done, err = future.DoneWithContext(context.Background(), client)
17910	if err != nil {
17911		err = autorest.NewErrorWithError(err, "network.HubRouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
17912		return
17913	}
17914	if !done {
17915		err = azure.NewAsyncOpIncompleteError("network.HubRouteTablesDeleteFuture")
17916		return
17917	}
17918	ar.Response = future.Response()
17919	return
17920}
17921
17922// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
17923type HubVirtualNetworkConnection struct {
17924	autorest.Response `json:"-"`
17925	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
17926	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
17927	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
17928	Name *string `json:"name,omitempty"`
17929	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
17930	Etag *string `json:"etag,omitempty"`
17931	// ID - Resource ID.
17932	ID *string `json:"id,omitempty"`
17933}
17934
17935// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
17936func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
17937	objectMap := make(map[string]interface{})
17938	if hvnc.HubVirtualNetworkConnectionProperties != nil {
17939		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
17940	}
17941	if hvnc.Name != nil {
17942		objectMap["name"] = hvnc.Name
17943	}
17944	if hvnc.ID != nil {
17945		objectMap["id"] = hvnc.ID
17946	}
17947	return json.Marshal(objectMap)
17948}
17949
17950// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
17951func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
17952	var m map[string]*json.RawMessage
17953	err := json.Unmarshal(body, &m)
17954	if err != nil {
17955		return err
17956	}
17957	for k, v := range m {
17958		switch k {
17959		case "properties":
17960			if v != nil {
17961				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
17962				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
17963				if err != nil {
17964					return err
17965				}
17966				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
17967			}
17968		case "name":
17969			if v != nil {
17970				var name string
17971				err = json.Unmarshal(*v, &name)
17972				if err != nil {
17973					return err
17974				}
17975				hvnc.Name = &name
17976			}
17977		case "etag":
17978			if v != nil {
17979				var etag string
17980				err = json.Unmarshal(*v, &etag)
17981				if err != nil {
17982					return err
17983				}
17984				hvnc.Etag = &etag
17985			}
17986		case "id":
17987			if v != nil {
17988				var ID string
17989				err = json.Unmarshal(*v, &ID)
17990				if err != nil {
17991					return err
17992				}
17993				hvnc.ID = &ID
17994			}
17995		}
17996	}
17997
17998	return nil
17999}
18000
18001// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection.
18002type HubVirtualNetworkConnectionProperties struct {
18003	// RemoteVirtualNetwork - Reference to the remote virtual network.
18004	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
18005	// AllowHubToRemoteVnetTransit - Deprecated: VirtualHub to RemoteVnet transit to enabled or not.
18006	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
18007	// AllowRemoteVnetToUseHubVnetGateways - Deprecated: Allow RemoteVnet to use Virtual Hub's gateways.
18008	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
18009	// EnableInternetSecurity - Enable internet security.
18010	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
18011	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
18012	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
18013	// ProvisioningState - READ-ONLY; The provisioning state of the hub virtual network connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18014	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18015}
18016
18017// HubVirtualNetworkConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
18018// results of a long-running operation.
18019type HubVirtualNetworkConnectionsCreateOrUpdateFuture struct {
18020	azure.Future
18021}
18022
18023// Result returns the result of the asynchronous operation.
18024// If the operation has not completed it will return an error.
18025func (future *HubVirtualNetworkConnectionsCreateOrUpdateFuture) Result(client HubVirtualNetworkConnectionsClient) (hvnc HubVirtualNetworkConnection, err error) {
18026	var done bool
18027	done, err = future.DoneWithContext(context.Background(), client)
18028	if err != nil {
18029		err = autorest.NewErrorWithError(err, "network.HubVirtualNetworkConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18030		return
18031	}
18032	if !done {
18033		err = azure.NewAsyncOpIncompleteError("network.HubVirtualNetworkConnectionsCreateOrUpdateFuture")
18034		return
18035	}
18036	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18037	if hvnc.Response.Response, err = future.GetResult(sender); err == nil && hvnc.Response.Response.StatusCode != http.StatusNoContent {
18038		hvnc, err = client.CreateOrUpdateResponder(hvnc.Response.Response)
18039		if err != nil {
18040			err = autorest.NewErrorWithError(err, "network.HubVirtualNetworkConnectionsCreateOrUpdateFuture", "Result", hvnc.Response.Response, "Failure responding to request")
18041		}
18042	}
18043	return
18044}
18045
18046// HubVirtualNetworkConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
18047// long-running operation.
18048type HubVirtualNetworkConnectionsDeleteFuture struct {
18049	azure.Future
18050}
18051
18052// Result returns the result of the asynchronous operation.
18053// If the operation has not completed it will return an error.
18054func (future *HubVirtualNetworkConnectionsDeleteFuture) Result(client HubVirtualNetworkConnectionsClient) (ar autorest.Response, err error) {
18055	var done bool
18056	done, err = future.DoneWithContext(context.Background(), client)
18057	if err != nil {
18058		err = autorest.NewErrorWithError(err, "network.HubVirtualNetworkConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
18059		return
18060	}
18061	if !done {
18062		err = azure.NewAsyncOpIncompleteError("network.HubVirtualNetworkConnectionsDeleteFuture")
18063		return
18064	}
18065	ar.Response = future.Response()
18066	return
18067}
18068
18069// InboundNatPool inbound NAT pool of the load balancer.
18070type InboundNatPool struct {
18071	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
18072	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
18073	// Name - The name of the resource that is unique within the set of inbound NAT pools used by the load balancer. This name can be used to access the resource.
18074	Name *string `json:"name,omitempty"`
18075	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18076	Etag *string `json:"etag,omitempty"`
18077	// Type - READ-ONLY; Type of the resource.
18078	Type *string `json:"type,omitempty"`
18079	// ID - Resource ID.
18080	ID *string `json:"id,omitempty"`
18081}
18082
18083// MarshalJSON is the custom marshaler for InboundNatPool.
18084func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
18085	objectMap := make(map[string]interface{})
18086	if inp.InboundNatPoolPropertiesFormat != nil {
18087		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
18088	}
18089	if inp.Name != nil {
18090		objectMap["name"] = inp.Name
18091	}
18092	if inp.ID != nil {
18093		objectMap["id"] = inp.ID
18094	}
18095	return json.Marshal(objectMap)
18096}
18097
18098// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
18099func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
18100	var m map[string]*json.RawMessage
18101	err := json.Unmarshal(body, &m)
18102	if err != nil {
18103		return err
18104	}
18105	for k, v := range m {
18106		switch k {
18107		case "properties":
18108			if v != nil {
18109				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
18110				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
18111				if err != nil {
18112					return err
18113				}
18114				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
18115			}
18116		case "name":
18117			if v != nil {
18118				var name string
18119				err = json.Unmarshal(*v, &name)
18120				if err != nil {
18121					return err
18122				}
18123				inp.Name = &name
18124			}
18125		case "etag":
18126			if v != nil {
18127				var etag string
18128				err = json.Unmarshal(*v, &etag)
18129				if err != nil {
18130					return err
18131				}
18132				inp.Etag = &etag
18133			}
18134		case "type":
18135			if v != nil {
18136				var typeVar string
18137				err = json.Unmarshal(*v, &typeVar)
18138				if err != nil {
18139					return err
18140				}
18141				inp.Type = &typeVar
18142			}
18143		case "id":
18144			if v != nil {
18145				var ID string
18146				err = json.Unmarshal(*v, &ID)
18147				if err != nil {
18148					return err
18149				}
18150				inp.ID = &ID
18151			}
18152		}
18153	}
18154
18155	return nil
18156}
18157
18158// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
18159type InboundNatPoolPropertiesFormat struct {
18160	// FrontendIPConfiguration - A reference to frontend IP addresses.
18161	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
18162	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
18163	Protocol TransportProtocol `json:"protocol,omitempty"`
18164	// FrontendPortRangeStart - The first port number in the range of external ports that will be used to provide Inbound Nat to NICs associated with a load balancer. Acceptable values range between 1 and 65534.
18165	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
18166	// FrontendPortRangeEnd - The last port number in the range of external ports that will be used to provide Inbound Nat to NICs associated with a load balancer. Acceptable values range between 1 and 65535.
18167	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
18168	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
18169	BackendPort *int32 `json:"backendPort,omitempty"`
18170	// IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.
18171	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
18172	// EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint.
18173	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
18174	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
18175	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
18176	// ProvisioningState - READ-ONLY; The provisioning state of the inbound NAT pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18177	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18178}
18179
18180// InboundNatRule inbound NAT rule of the load balancer.
18181type InboundNatRule struct {
18182	autorest.Response `json:"-"`
18183	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
18184	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
18185	// Name - The name of the resource that is unique within the set of inbound NAT rules used by the load balancer. This name can be used to access the resource.
18186	Name *string `json:"name,omitempty"`
18187	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18188	Etag *string `json:"etag,omitempty"`
18189	// Type - READ-ONLY; Type of the resource.
18190	Type *string `json:"type,omitempty"`
18191	// ID - Resource ID.
18192	ID *string `json:"id,omitempty"`
18193}
18194
18195// MarshalJSON is the custom marshaler for InboundNatRule.
18196func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
18197	objectMap := make(map[string]interface{})
18198	if inr.InboundNatRulePropertiesFormat != nil {
18199		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
18200	}
18201	if inr.Name != nil {
18202		objectMap["name"] = inr.Name
18203	}
18204	if inr.ID != nil {
18205		objectMap["id"] = inr.ID
18206	}
18207	return json.Marshal(objectMap)
18208}
18209
18210// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
18211func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
18212	var m map[string]*json.RawMessage
18213	err := json.Unmarshal(body, &m)
18214	if err != nil {
18215		return err
18216	}
18217	for k, v := range m {
18218		switch k {
18219		case "properties":
18220			if v != nil {
18221				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
18222				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
18223				if err != nil {
18224					return err
18225				}
18226				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
18227			}
18228		case "name":
18229			if v != nil {
18230				var name string
18231				err = json.Unmarshal(*v, &name)
18232				if err != nil {
18233					return err
18234				}
18235				inr.Name = &name
18236			}
18237		case "etag":
18238			if v != nil {
18239				var etag string
18240				err = json.Unmarshal(*v, &etag)
18241				if err != nil {
18242					return err
18243				}
18244				inr.Etag = &etag
18245			}
18246		case "type":
18247			if v != nil {
18248				var typeVar string
18249				err = json.Unmarshal(*v, &typeVar)
18250				if err != nil {
18251					return err
18252				}
18253				inr.Type = &typeVar
18254			}
18255		case "id":
18256			if v != nil {
18257				var ID string
18258				err = json.Unmarshal(*v, &ID)
18259				if err != nil {
18260					return err
18261				}
18262				inr.ID = &ID
18263			}
18264		}
18265	}
18266
18267	return nil
18268}
18269
18270// InboundNatRuleListResult response for ListInboundNatRule API service call.
18271type InboundNatRuleListResult struct {
18272	autorest.Response `json:"-"`
18273	// Value - A list of inbound nat rules in a load balancer.
18274	Value *[]InboundNatRule `json:"value,omitempty"`
18275	// NextLink - READ-ONLY; The URL to get the next set of results.
18276	NextLink *string `json:"nextLink,omitempty"`
18277}
18278
18279// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
18280type InboundNatRuleListResultIterator struct {
18281	i    int
18282	page InboundNatRuleListResultPage
18283}
18284
18285// NextWithContext advances to the next value.  If there was an error making
18286// the request the iterator does not advance and the error is returned.
18287func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
18288	if tracing.IsEnabled() {
18289		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
18290		defer func() {
18291			sc := -1
18292			if iter.Response().Response.Response != nil {
18293				sc = iter.Response().Response.Response.StatusCode
18294			}
18295			tracing.EndSpan(ctx, sc, err)
18296		}()
18297	}
18298	iter.i++
18299	if iter.i < len(iter.page.Values()) {
18300		return nil
18301	}
18302	err = iter.page.NextWithContext(ctx)
18303	if err != nil {
18304		iter.i--
18305		return err
18306	}
18307	iter.i = 0
18308	return nil
18309}
18310
18311// Next advances to the next value.  If there was an error making
18312// the request the iterator does not advance and the error is returned.
18313// Deprecated: Use NextWithContext() instead.
18314func (iter *InboundNatRuleListResultIterator) Next() error {
18315	return iter.NextWithContext(context.Background())
18316}
18317
18318// NotDone returns true if the enumeration should be started or is not yet complete.
18319func (iter InboundNatRuleListResultIterator) NotDone() bool {
18320	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18321}
18322
18323// Response returns the raw server response from the last page request.
18324func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
18325	return iter.page.Response()
18326}
18327
18328// Value returns the current value or a zero-initialized value if the
18329// iterator has advanced beyond the end of the collection.
18330func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
18331	if !iter.page.NotDone() {
18332		return InboundNatRule{}
18333	}
18334	return iter.page.Values()[iter.i]
18335}
18336
18337// Creates a new instance of the InboundNatRuleListResultIterator type.
18338func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
18339	return InboundNatRuleListResultIterator{page: page}
18340}
18341
18342// IsEmpty returns true if the ListResult contains no values.
18343func (inrlr InboundNatRuleListResult) IsEmpty() bool {
18344	return inrlr.Value == nil || len(*inrlr.Value) == 0
18345}
18346
18347// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
18348// It returns nil if no more results exist.
18349func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
18350	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
18351		return nil, nil
18352	}
18353	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18354		autorest.AsJSON(),
18355		autorest.AsGet(),
18356		autorest.WithBaseURL(to.String(inrlr.NextLink)))
18357}
18358
18359// InboundNatRuleListResultPage contains a page of InboundNatRule values.
18360type InboundNatRuleListResultPage struct {
18361	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
18362	inrlr InboundNatRuleListResult
18363}
18364
18365// NextWithContext advances to the next page of values.  If there was an error making
18366// the request the page does not advance and the error is returned.
18367func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
18368	if tracing.IsEnabled() {
18369		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
18370		defer func() {
18371			sc := -1
18372			if page.Response().Response.Response != nil {
18373				sc = page.Response().Response.Response.StatusCode
18374			}
18375			tracing.EndSpan(ctx, sc, err)
18376		}()
18377	}
18378	next, err := page.fn(ctx, page.inrlr)
18379	if err != nil {
18380		return err
18381	}
18382	page.inrlr = next
18383	return nil
18384}
18385
18386// Next advances to the next page of values.  If there was an error making
18387// the request the page does not advance and the error is returned.
18388// Deprecated: Use NextWithContext() instead.
18389func (page *InboundNatRuleListResultPage) Next() error {
18390	return page.NextWithContext(context.Background())
18391}
18392
18393// NotDone returns true if the page enumeration should be started or is not yet complete.
18394func (page InboundNatRuleListResultPage) NotDone() bool {
18395	return !page.inrlr.IsEmpty()
18396}
18397
18398// Response returns the raw server response from the last page request.
18399func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
18400	return page.inrlr
18401}
18402
18403// Values returns the slice of values for the current page or nil if there are no values.
18404func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
18405	if page.inrlr.IsEmpty() {
18406		return nil
18407	}
18408	return *page.inrlr.Value
18409}
18410
18411// Creates a new instance of the InboundNatRuleListResultPage type.
18412func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
18413	return InboundNatRuleListResultPage{fn: getNextPage}
18414}
18415
18416// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
18417type InboundNatRulePropertiesFormat struct {
18418	// FrontendIPConfiguration - A reference to frontend IP addresses.
18419	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
18420	// BackendIPConfiguration - READ-ONLY; A reference to a private IP address defined on a network interface of a VM. Traffic sent to the frontend port of each of the frontend IP configurations is forwarded to the backend IP.
18421	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
18422	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
18423	Protocol TransportProtocol `json:"protocol,omitempty"`
18424	// FrontendPort - The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values range from 1 to 65534.
18425	FrontendPort *int32 `json:"frontendPort,omitempty"`
18426	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
18427	BackendPort *int32 `json:"backendPort,omitempty"`
18428	// IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.
18429	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
18430	// EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint.
18431	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
18432	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
18433	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
18434	// ProvisioningState - READ-ONLY; The provisioning state of the inbound NAT rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18435	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18436}
18437
18438// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
18439// long-running operation.
18440type InboundNatRulesCreateOrUpdateFuture struct {
18441	azure.Future
18442}
18443
18444// Result returns the result of the asynchronous operation.
18445// If the operation has not completed it will return an error.
18446func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
18447	var done bool
18448	done, err = future.DoneWithContext(context.Background(), client)
18449	if err != nil {
18450		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
18451		return
18452	}
18453	if !done {
18454		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
18455		return
18456	}
18457	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
18458	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
18459		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
18460		if err != nil {
18461			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
18462		}
18463	}
18464	return
18465}
18466
18467// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
18468// operation.
18469type InboundNatRulesDeleteFuture struct {
18470	azure.Future
18471}
18472
18473// Result returns the result of the asynchronous operation.
18474// If the operation has not completed it will return an error.
18475func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
18476	var done bool
18477	done, err = future.DoneWithContext(context.Background(), client)
18478	if err != nil {
18479		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
18480		return
18481	}
18482	if !done {
18483		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
18484		return
18485	}
18486	ar.Response = future.Response()
18487	return
18488}
18489
18490// IntentPolicy network Intent Policy resource.
18491type IntentPolicy struct {
18492	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18493	Etag *string `json:"etag,omitempty"`
18494	// ID - Resource ID.
18495	ID *string `json:"id,omitempty"`
18496	// Name - READ-ONLY; Resource name.
18497	Name *string `json:"name,omitempty"`
18498	// Type - READ-ONLY; Resource type.
18499	Type *string `json:"type,omitempty"`
18500	// Location - Resource location.
18501	Location *string `json:"location,omitempty"`
18502	// Tags - Resource tags.
18503	Tags map[string]*string `json:"tags"`
18504}
18505
18506// MarshalJSON is the custom marshaler for IntentPolicy.
18507func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
18508	objectMap := make(map[string]interface{})
18509	if IP.ID != nil {
18510		objectMap["id"] = IP.ID
18511	}
18512	if IP.Location != nil {
18513		objectMap["location"] = IP.Location
18514	}
18515	if IP.Tags != nil {
18516		objectMap["tags"] = IP.Tags
18517	}
18518	return json.Marshal(objectMap)
18519}
18520
18521// IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
18522type IntentPolicyConfiguration struct {
18523	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
18524	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
18525	// SourceNetworkIntentPolicy - Source network intent policy.
18526	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
18527}
18528
18529// Interface a network interface in a resource group.
18530type Interface struct {
18531	autorest.Response `json:"-"`
18532	// InterfacePropertiesFormat - Properties of the network interface.
18533	*InterfacePropertiesFormat `json:"properties,omitempty"`
18534	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18535	Etag *string `json:"etag,omitempty"`
18536	// ID - Resource ID.
18537	ID *string `json:"id,omitempty"`
18538	// Name - READ-ONLY; Resource name.
18539	Name *string `json:"name,omitempty"`
18540	// Type - READ-ONLY; Resource type.
18541	Type *string `json:"type,omitempty"`
18542	// Location - Resource location.
18543	Location *string `json:"location,omitempty"`
18544	// Tags - Resource tags.
18545	Tags map[string]*string `json:"tags"`
18546}
18547
18548// MarshalJSON is the custom marshaler for Interface.
18549func (i Interface) MarshalJSON() ([]byte, error) {
18550	objectMap := make(map[string]interface{})
18551	if i.InterfacePropertiesFormat != nil {
18552		objectMap["properties"] = i.InterfacePropertiesFormat
18553	}
18554	if i.ID != nil {
18555		objectMap["id"] = i.ID
18556	}
18557	if i.Location != nil {
18558		objectMap["location"] = i.Location
18559	}
18560	if i.Tags != nil {
18561		objectMap["tags"] = i.Tags
18562	}
18563	return json.Marshal(objectMap)
18564}
18565
18566// UnmarshalJSON is the custom unmarshaler for Interface struct.
18567func (i *Interface) UnmarshalJSON(body []byte) error {
18568	var m map[string]*json.RawMessage
18569	err := json.Unmarshal(body, &m)
18570	if err != nil {
18571		return err
18572	}
18573	for k, v := range m {
18574		switch k {
18575		case "properties":
18576			if v != nil {
18577				var interfacePropertiesFormat InterfacePropertiesFormat
18578				err = json.Unmarshal(*v, &interfacePropertiesFormat)
18579				if err != nil {
18580					return err
18581				}
18582				i.InterfacePropertiesFormat = &interfacePropertiesFormat
18583			}
18584		case "etag":
18585			if v != nil {
18586				var etag string
18587				err = json.Unmarshal(*v, &etag)
18588				if err != nil {
18589					return err
18590				}
18591				i.Etag = &etag
18592			}
18593		case "id":
18594			if v != nil {
18595				var ID string
18596				err = json.Unmarshal(*v, &ID)
18597				if err != nil {
18598					return err
18599				}
18600				i.ID = &ID
18601			}
18602		case "name":
18603			if v != nil {
18604				var name string
18605				err = json.Unmarshal(*v, &name)
18606				if err != nil {
18607					return err
18608				}
18609				i.Name = &name
18610			}
18611		case "type":
18612			if v != nil {
18613				var typeVar string
18614				err = json.Unmarshal(*v, &typeVar)
18615				if err != nil {
18616					return err
18617				}
18618				i.Type = &typeVar
18619			}
18620		case "location":
18621			if v != nil {
18622				var location string
18623				err = json.Unmarshal(*v, &location)
18624				if err != nil {
18625					return err
18626				}
18627				i.Location = &location
18628			}
18629		case "tags":
18630			if v != nil {
18631				var tags map[string]*string
18632				err = json.Unmarshal(*v, &tags)
18633				if err != nil {
18634					return err
18635				}
18636				i.Tags = tags
18637			}
18638		}
18639	}
18640
18641	return nil
18642}
18643
18644// InterfaceAssociation network interface and its custom security rules.
18645type InterfaceAssociation struct {
18646	// ID - READ-ONLY; Network interface ID.
18647	ID *string `json:"id,omitempty"`
18648	// SecurityRules - Collection of custom security rules.
18649	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
18650}
18651
18652// InterfaceDNSSettings DNS settings of a network interface.
18653type InterfaceDNSSettings struct {
18654	// DNSServers - List of DNS servers IP addresses. Use 'AzureProvidedDNS' to switch to azure provided DNS resolution. 'AzureProvidedDNS' value cannot be combined with other IPs, it must be the only value in dnsServers collection.
18655	DNSServers *[]string `json:"dnsServers,omitempty"`
18656	// AppliedDNSServers - READ-ONLY; If the VM that uses this NIC is part of an Availability Set, then this list will have the union of all DNS servers from all NICs that are part of the Availability Set. This property is what is configured on each of those VMs.
18657	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
18658	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
18659	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
18660	// InternalFqdn - READ-ONLY; Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
18661	InternalFqdn *string `json:"internalFqdn,omitempty"`
18662	// InternalDomainNameSuffix - READ-ONLY; Even if internalDnsNameLabel is not specified, a DNS entry is created for the primary NIC of the VM. This DNS name can be constructed by concatenating the VM name with the value of internalDomainNameSuffix.
18663	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
18664}
18665
18666// InterfaceIPConfiguration iPConfiguration in a network interface.
18667type InterfaceIPConfiguration struct {
18668	autorest.Response `json:"-"`
18669	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
18670	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
18671	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
18672	Name *string `json:"name,omitempty"`
18673	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
18674	Etag *string `json:"etag,omitempty"`
18675	// ID - Resource ID.
18676	ID *string `json:"id,omitempty"`
18677}
18678
18679// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
18680func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
18681	objectMap := make(map[string]interface{})
18682	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
18683		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
18684	}
18685	if iic.Name != nil {
18686		objectMap["name"] = iic.Name
18687	}
18688	if iic.ID != nil {
18689		objectMap["id"] = iic.ID
18690	}
18691	return json.Marshal(objectMap)
18692}
18693
18694// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
18695func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
18696	var m map[string]*json.RawMessage
18697	err := json.Unmarshal(body, &m)
18698	if err != nil {
18699		return err
18700	}
18701	for k, v := range m {
18702		switch k {
18703		case "properties":
18704			if v != nil {
18705				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
18706				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
18707				if err != nil {
18708					return err
18709				}
18710				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
18711			}
18712		case "name":
18713			if v != nil {
18714				var name string
18715				err = json.Unmarshal(*v, &name)
18716				if err != nil {
18717					return err
18718				}
18719				iic.Name = &name
18720			}
18721		case "etag":
18722			if v != nil {
18723				var etag string
18724				err = json.Unmarshal(*v, &etag)
18725				if err != nil {
18726					return err
18727				}
18728				iic.Etag = &etag
18729			}
18730		case "id":
18731			if v != nil {
18732				var ID string
18733				err = json.Unmarshal(*v, &ID)
18734				if err != nil {
18735					return err
18736				}
18737				iic.ID = &ID
18738			}
18739		}
18740	}
18741
18742	return nil
18743}
18744
18745// InterfaceIPConfigurationListResult response for list ip configurations API service call.
18746type InterfaceIPConfigurationListResult struct {
18747	autorest.Response `json:"-"`
18748	// Value - A list of ip configurations.
18749	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
18750	// NextLink - READ-ONLY; The URL to get the next set of results.
18751	NextLink *string `json:"nextLink,omitempty"`
18752}
18753
18754// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
18755// InterfaceIPConfiguration values.
18756type InterfaceIPConfigurationListResultIterator struct {
18757	i    int
18758	page InterfaceIPConfigurationListResultPage
18759}
18760
18761// NextWithContext advances to the next value.  If there was an error making
18762// the request the iterator does not advance and the error is returned.
18763func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
18764	if tracing.IsEnabled() {
18765		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
18766		defer func() {
18767			sc := -1
18768			if iter.Response().Response.Response != nil {
18769				sc = iter.Response().Response.Response.StatusCode
18770			}
18771			tracing.EndSpan(ctx, sc, err)
18772		}()
18773	}
18774	iter.i++
18775	if iter.i < len(iter.page.Values()) {
18776		return nil
18777	}
18778	err = iter.page.NextWithContext(ctx)
18779	if err != nil {
18780		iter.i--
18781		return err
18782	}
18783	iter.i = 0
18784	return nil
18785}
18786
18787// Next advances to the next value.  If there was an error making
18788// the request the iterator does not advance and the error is returned.
18789// Deprecated: Use NextWithContext() instead.
18790func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
18791	return iter.NextWithContext(context.Background())
18792}
18793
18794// NotDone returns true if the enumeration should be started or is not yet complete.
18795func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
18796	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18797}
18798
18799// Response returns the raw server response from the last page request.
18800func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
18801	return iter.page.Response()
18802}
18803
18804// Value returns the current value or a zero-initialized value if the
18805// iterator has advanced beyond the end of the collection.
18806func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
18807	if !iter.page.NotDone() {
18808		return InterfaceIPConfiguration{}
18809	}
18810	return iter.page.Values()[iter.i]
18811}
18812
18813// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
18814func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
18815	return InterfaceIPConfigurationListResultIterator{page: page}
18816}
18817
18818// IsEmpty returns true if the ListResult contains no values.
18819func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
18820	return iiclr.Value == nil || len(*iiclr.Value) == 0
18821}
18822
18823// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
18824// It returns nil if no more results exist.
18825func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
18826	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
18827		return nil, nil
18828	}
18829	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18830		autorest.AsJSON(),
18831		autorest.AsGet(),
18832		autorest.WithBaseURL(to.String(iiclr.NextLink)))
18833}
18834
18835// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
18836type InterfaceIPConfigurationListResultPage struct {
18837	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
18838	iiclr InterfaceIPConfigurationListResult
18839}
18840
18841// NextWithContext advances to the next page of values.  If there was an error making
18842// the request the page does not advance and the error is returned.
18843func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
18844	if tracing.IsEnabled() {
18845		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
18846		defer func() {
18847			sc := -1
18848			if page.Response().Response.Response != nil {
18849				sc = page.Response().Response.Response.StatusCode
18850			}
18851			tracing.EndSpan(ctx, sc, err)
18852		}()
18853	}
18854	next, err := page.fn(ctx, page.iiclr)
18855	if err != nil {
18856		return err
18857	}
18858	page.iiclr = next
18859	return nil
18860}
18861
18862// Next advances to the next page of values.  If there was an error making
18863// the request the page does not advance and the error is returned.
18864// Deprecated: Use NextWithContext() instead.
18865func (page *InterfaceIPConfigurationListResultPage) Next() error {
18866	return page.NextWithContext(context.Background())
18867}
18868
18869// NotDone returns true if the page enumeration should be started or is not yet complete.
18870func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
18871	return !page.iiclr.IsEmpty()
18872}
18873
18874// Response returns the raw server response from the last page request.
18875func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
18876	return page.iiclr
18877}
18878
18879// Values returns the slice of values for the current page or nil if there are no values.
18880func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
18881	if page.iiclr.IsEmpty() {
18882		return nil
18883	}
18884	return *page.iiclr.Value
18885}
18886
18887// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
18888func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
18889	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
18890}
18891
18892// InterfaceIPConfigurationPrivateLinkConnectionProperties privateLinkConnection properties for the network
18893// interface.
18894type InterfaceIPConfigurationPrivateLinkConnectionProperties struct {
18895	// GroupID - READ-ONLY; The group ID for current private link connection.
18896	GroupID *string `json:"groupId,omitempty"`
18897	// RequiredMemberName - READ-ONLY; The required member name for current private link connection.
18898	RequiredMemberName *string `json:"requiredMemberName,omitempty"`
18899	// Fqdns - READ-ONLY; List of FQDNs for current private link connection.
18900	Fqdns *[]string `json:"fqdns,omitempty"`
18901}
18902
18903// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
18904type InterfaceIPConfigurationPropertiesFormat struct {
18905	// VirtualNetworkTaps - The reference to Virtual Network Taps.
18906	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
18907	// ApplicationGatewayBackendAddressPools - The reference to ApplicationGatewayBackendAddressPool resource.
18908	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
18909	// LoadBalancerBackendAddressPools - The reference to LoadBalancerBackendAddressPool resource.
18910	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
18911	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
18912	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
18913	// PrivateIPAddress - Private IP address of the IP configuration.
18914	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
18915	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
18916	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
18917	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
18918	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
18919	// Subnet - Subnet bound to the IP configuration.
18920	Subnet *Subnet `json:"subnet,omitempty"`
18921	// Primary - Whether this is a primary customer address on the network interface.
18922	Primary *bool `json:"primary,omitempty"`
18923	// PublicIPAddress - Public IP address bound to the IP configuration.
18924	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
18925	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
18926	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
18927	// ProvisioningState - READ-ONLY; The provisioning state of the network interface IP configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
18928	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
18929	// PrivateLinkConnectionProperties - READ-ONLY; PrivateLinkConnection properties for the network interface.
18930	PrivateLinkConnectionProperties *InterfaceIPConfigurationPrivateLinkConnectionProperties `json:"privateLinkConnectionProperties,omitempty"`
18931}
18932
18933// InterfaceListResult response for the ListNetworkInterface API service call.
18934type InterfaceListResult struct {
18935	autorest.Response `json:"-"`
18936	// Value - A list of network interfaces in a resource group.
18937	Value *[]Interface `json:"value,omitempty"`
18938	// NextLink - READ-ONLY; The URL to get the next set of results.
18939	NextLink *string `json:"nextLink,omitempty"`
18940}
18941
18942// InterfaceListResultIterator provides access to a complete listing of Interface values.
18943type InterfaceListResultIterator struct {
18944	i    int
18945	page InterfaceListResultPage
18946}
18947
18948// NextWithContext advances to the next value.  If there was an error making
18949// the request the iterator does not advance and the error is returned.
18950func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
18951	if tracing.IsEnabled() {
18952		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
18953		defer func() {
18954			sc := -1
18955			if iter.Response().Response.Response != nil {
18956				sc = iter.Response().Response.Response.StatusCode
18957			}
18958			tracing.EndSpan(ctx, sc, err)
18959		}()
18960	}
18961	iter.i++
18962	if iter.i < len(iter.page.Values()) {
18963		return nil
18964	}
18965	err = iter.page.NextWithContext(ctx)
18966	if err != nil {
18967		iter.i--
18968		return err
18969	}
18970	iter.i = 0
18971	return nil
18972}
18973
18974// Next advances to the next value.  If there was an error making
18975// the request the iterator does not advance and the error is returned.
18976// Deprecated: Use NextWithContext() instead.
18977func (iter *InterfaceListResultIterator) Next() error {
18978	return iter.NextWithContext(context.Background())
18979}
18980
18981// NotDone returns true if the enumeration should be started or is not yet complete.
18982func (iter InterfaceListResultIterator) NotDone() bool {
18983	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18984}
18985
18986// Response returns the raw server response from the last page request.
18987func (iter InterfaceListResultIterator) Response() InterfaceListResult {
18988	return iter.page.Response()
18989}
18990
18991// Value returns the current value or a zero-initialized value if the
18992// iterator has advanced beyond the end of the collection.
18993func (iter InterfaceListResultIterator) Value() Interface {
18994	if !iter.page.NotDone() {
18995		return Interface{}
18996	}
18997	return iter.page.Values()[iter.i]
18998}
18999
19000// Creates a new instance of the InterfaceListResultIterator type.
19001func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
19002	return InterfaceListResultIterator{page: page}
19003}
19004
19005// IsEmpty returns true if the ListResult contains no values.
19006func (ilr InterfaceListResult) IsEmpty() bool {
19007	return ilr.Value == nil || len(*ilr.Value) == 0
19008}
19009
19010// interfaceListResultPreparer prepares a request to retrieve the next set of results.
19011// It returns nil if no more results exist.
19012func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
19013	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
19014		return nil, nil
19015	}
19016	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19017		autorest.AsJSON(),
19018		autorest.AsGet(),
19019		autorest.WithBaseURL(to.String(ilr.NextLink)))
19020}
19021
19022// InterfaceListResultPage contains a page of Interface values.
19023type InterfaceListResultPage struct {
19024	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
19025	ilr InterfaceListResult
19026}
19027
19028// NextWithContext advances to the next page of values.  If there was an error making
19029// the request the page does not advance and the error is returned.
19030func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
19031	if tracing.IsEnabled() {
19032		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
19033		defer func() {
19034			sc := -1
19035			if page.Response().Response.Response != nil {
19036				sc = page.Response().Response.Response.StatusCode
19037			}
19038			tracing.EndSpan(ctx, sc, err)
19039		}()
19040	}
19041	next, err := page.fn(ctx, page.ilr)
19042	if err != nil {
19043		return err
19044	}
19045	page.ilr = next
19046	return nil
19047}
19048
19049// Next advances to the next page of values.  If there was an error making
19050// the request the page does not advance and the error is returned.
19051// Deprecated: Use NextWithContext() instead.
19052func (page *InterfaceListResultPage) Next() error {
19053	return page.NextWithContext(context.Background())
19054}
19055
19056// NotDone returns true if the page enumeration should be started or is not yet complete.
19057func (page InterfaceListResultPage) NotDone() bool {
19058	return !page.ilr.IsEmpty()
19059}
19060
19061// Response returns the raw server response from the last page request.
19062func (page InterfaceListResultPage) Response() InterfaceListResult {
19063	return page.ilr
19064}
19065
19066// Values returns the slice of values for the current page or nil if there are no values.
19067func (page InterfaceListResultPage) Values() []Interface {
19068	if page.ilr.IsEmpty() {
19069		return nil
19070	}
19071	return *page.ilr.Value
19072}
19073
19074// Creates a new instance of the InterfaceListResultPage type.
19075func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
19076	return InterfaceListResultPage{fn: getNextPage}
19077}
19078
19079// InterfaceLoadBalancerListResult response for list ip configurations API service call.
19080type InterfaceLoadBalancerListResult struct {
19081	autorest.Response `json:"-"`
19082	// Value - A list of load balancers.
19083	Value *[]LoadBalancer `json:"value,omitempty"`
19084	// NextLink - READ-ONLY; The URL to get the next set of results.
19085	NextLink *string `json:"nextLink,omitempty"`
19086}
19087
19088// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
19089type InterfaceLoadBalancerListResultIterator struct {
19090	i    int
19091	page InterfaceLoadBalancerListResultPage
19092}
19093
19094// NextWithContext advances to the next value.  If there was an error making
19095// the request the iterator does not advance and the error is returned.
19096func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
19097	if tracing.IsEnabled() {
19098		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
19099		defer func() {
19100			sc := -1
19101			if iter.Response().Response.Response != nil {
19102				sc = iter.Response().Response.Response.StatusCode
19103			}
19104			tracing.EndSpan(ctx, sc, err)
19105		}()
19106	}
19107	iter.i++
19108	if iter.i < len(iter.page.Values()) {
19109		return nil
19110	}
19111	err = iter.page.NextWithContext(ctx)
19112	if err != nil {
19113		iter.i--
19114		return err
19115	}
19116	iter.i = 0
19117	return nil
19118}
19119
19120// Next advances to the next value.  If there was an error making
19121// the request the iterator does not advance and the error is returned.
19122// Deprecated: Use NextWithContext() instead.
19123func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
19124	return iter.NextWithContext(context.Background())
19125}
19126
19127// NotDone returns true if the enumeration should be started or is not yet complete.
19128func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
19129	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19130}
19131
19132// Response returns the raw server response from the last page request.
19133func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
19134	return iter.page.Response()
19135}
19136
19137// Value returns the current value or a zero-initialized value if the
19138// iterator has advanced beyond the end of the collection.
19139func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
19140	if !iter.page.NotDone() {
19141		return LoadBalancer{}
19142	}
19143	return iter.page.Values()[iter.i]
19144}
19145
19146// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
19147func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
19148	return InterfaceLoadBalancerListResultIterator{page: page}
19149}
19150
19151// IsEmpty returns true if the ListResult contains no values.
19152func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
19153	return ilblr.Value == nil || len(*ilblr.Value) == 0
19154}
19155
19156// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
19157// It returns nil if no more results exist.
19158func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
19159	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
19160		return nil, nil
19161	}
19162	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19163		autorest.AsJSON(),
19164		autorest.AsGet(),
19165		autorest.WithBaseURL(to.String(ilblr.NextLink)))
19166}
19167
19168// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
19169type InterfaceLoadBalancerListResultPage struct {
19170	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
19171	ilblr InterfaceLoadBalancerListResult
19172}
19173
19174// NextWithContext advances to the next page of values.  If there was an error making
19175// the request the page does not advance and the error is returned.
19176func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
19177	if tracing.IsEnabled() {
19178		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
19179		defer func() {
19180			sc := -1
19181			if page.Response().Response.Response != nil {
19182				sc = page.Response().Response.Response.StatusCode
19183			}
19184			tracing.EndSpan(ctx, sc, err)
19185		}()
19186	}
19187	next, err := page.fn(ctx, page.ilblr)
19188	if err != nil {
19189		return err
19190	}
19191	page.ilblr = next
19192	return nil
19193}
19194
19195// Next advances to the next page of values.  If there was an error making
19196// the request the page does not advance and the error is returned.
19197// Deprecated: Use NextWithContext() instead.
19198func (page *InterfaceLoadBalancerListResultPage) Next() error {
19199	return page.NextWithContext(context.Background())
19200}
19201
19202// NotDone returns true if the page enumeration should be started or is not yet complete.
19203func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
19204	return !page.ilblr.IsEmpty()
19205}
19206
19207// Response returns the raw server response from the last page request.
19208func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
19209	return page.ilblr
19210}
19211
19212// Values returns the slice of values for the current page or nil if there are no values.
19213func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
19214	if page.ilblr.IsEmpty() {
19215		return nil
19216	}
19217	return *page.ilblr.Value
19218}
19219
19220// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
19221func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
19222	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
19223}
19224
19225// InterfacePropertiesFormat networkInterface properties.
19226type InterfacePropertiesFormat struct {
19227	// VirtualMachine - READ-ONLY; The reference to a virtual machine.
19228	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
19229	// NetworkSecurityGroup - The reference to the NetworkSecurityGroup resource.
19230	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
19231	// PrivateEndpoint - READ-ONLY; A reference to the private endpoint to which the network interface is linked.
19232	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
19233	// IPConfigurations - A list of IPConfigurations of the network interface.
19234	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
19235	// TapConfigurations - READ-ONLY; A list of TapConfigurations of the network interface.
19236	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
19237	// DNSSettings - The DNS settings in network interface.
19238	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
19239	// MacAddress - READ-ONLY; The MAC address of the network interface.
19240	MacAddress *string `json:"macAddress,omitempty"`
19241	// Primary - READ-ONLY; Whether this is a primary network interface on a virtual machine.
19242	Primary *bool `json:"primary,omitempty"`
19243	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
19244	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
19245	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
19246	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
19247	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources.
19248	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
19249	// ResourceGUID - READ-ONLY; The resource GUID property of the network interface resource.
19250	ResourceGUID *string `json:"resourceGuid,omitempty"`
19251	// ProvisioningState - READ-ONLY; The provisioning state of the network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19252	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19253}
19254
19255// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19256// long-running operation.
19257type InterfacesCreateOrUpdateFuture struct {
19258	azure.Future
19259}
19260
19261// Result returns the result of the asynchronous operation.
19262// If the operation has not completed it will return an error.
19263func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
19264	var done bool
19265	done, err = future.DoneWithContext(context.Background(), client)
19266	if err != nil {
19267		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19268		return
19269	}
19270	if !done {
19271		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
19272		return
19273	}
19274	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19275	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
19276		i, err = client.CreateOrUpdateResponder(i.Response.Response)
19277		if err != nil {
19278			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
19279		}
19280	}
19281	return
19282}
19283
19284// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19285// operation.
19286type InterfacesDeleteFuture struct {
19287	azure.Future
19288}
19289
19290// Result returns the result of the asynchronous operation.
19291// If the operation has not completed it will return an error.
19292func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
19293	var done bool
19294	done, err = future.DoneWithContext(context.Background(), client)
19295	if err != nil {
19296		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
19297		return
19298	}
19299	if !done {
19300		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
19301		return
19302	}
19303	ar.Response = future.Response()
19304	return
19305}
19306
19307// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
19308// long-running operation.
19309type InterfacesGetEffectiveRouteTableFuture struct {
19310	azure.Future
19311}
19312
19313// Result returns the result of the asynchronous operation.
19314// If the operation has not completed it will return an error.
19315func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
19316	var done bool
19317	done, err = future.DoneWithContext(context.Background(), client)
19318	if err != nil {
19319		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
19320		return
19321	}
19322	if !done {
19323		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
19324		return
19325	}
19326	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19327	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
19328		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
19329		if err != nil {
19330			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
19331		}
19332	}
19333	return
19334}
19335
19336// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
19337// results of a long-running operation.
19338type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
19339	azure.Future
19340}
19341
19342// Result returns the result of the asynchronous operation.
19343// If the operation has not completed it will return an error.
19344func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
19345	var done bool
19346	done, err = future.DoneWithContext(context.Background(), client)
19347	if err != nil {
19348		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
19349		return
19350	}
19351	if !done {
19352		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
19353		return
19354	}
19355	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19356	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
19357		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
19358		if err != nil {
19359			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
19360		}
19361	}
19362	return
19363}
19364
19365// InterfaceTapConfiguration tap configuration in a Network Interface.
19366type InterfaceTapConfiguration struct {
19367	autorest.Response `json:"-"`
19368	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration.
19369	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
19370	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
19371	Name *string `json:"name,omitempty"`
19372	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
19373	Etag *string `json:"etag,omitempty"`
19374	// Type - READ-ONLY; Sub Resource type.
19375	Type *string `json:"type,omitempty"`
19376	// ID - Resource ID.
19377	ID *string `json:"id,omitempty"`
19378}
19379
19380// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
19381func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
19382	objectMap := make(map[string]interface{})
19383	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
19384		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
19385	}
19386	if itc.Name != nil {
19387		objectMap["name"] = itc.Name
19388	}
19389	if itc.ID != nil {
19390		objectMap["id"] = itc.ID
19391	}
19392	return json.Marshal(objectMap)
19393}
19394
19395// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
19396func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
19397	var m map[string]*json.RawMessage
19398	err := json.Unmarshal(body, &m)
19399	if err != nil {
19400		return err
19401	}
19402	for k, v := range m {
19403		switch k {
19404		case "properties":
19405			if v != nil {
19406				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
19407				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
19408				if err != nil {
19409					return err
19410				}
19411				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
19412			}
19413		case "name":
19414			if v != nil {
19415				var name string
19416				err = json.Unmarshal(*v, &name)
19417				if err != nil {
19418					return err
19419				}
19420				itc.Name = &name
19421			}
19422		case "etag":
19423			if v != nil {
19424				var etag string
19425				err = json.Unmarshal(*v, &etag)
19426				if err != nil {
19427					return err
19428				}
19429				itc.Etag = &etag
19430			}
19431		case "type":
19432			if v != nil {
19433				var typeVar string
19434				err = json.Unmarshal(*v, &typeVar)
19435				if err != nil {
19436					return err
19437				}
19438				itc.Type = &typeVar
19439			}
19440		case "id":
19441			if v != nil {
19442				var ID string
19443				err = json.Unmarshal(*v, &ID)
19444				if err != nil {
19445					return err
19446				}
19447				itc.ID = &ID
19448			}
19449		}
19450	}
19451
19452	return nil
19453}
19454
19455// InterfaceTapConfigurationListResult response for list tap configurations API service call.
19456type InterfaceTapConfigurationListResult struct {
19457	autorest.Response `json:"-"`
19458	// Value - A list of tap configurations.
19459	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
19460	// NextLink - READ-ONLY; The URL to get the next set of results.
19461	NextLink *string `json:"nextLink,omitempty"`
19462}
19463
19464// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
19465// InterfaceTapConfiguration values.
19466type InterfaceTapConfigurationListResultIterator struct {
19467	i    int
19468	page InterfaceTapConfigurationListResultPage
19469}
19470
19471// NextWithContext advances to the next value.  If there was an error making
19472// the request the iterator does not advance and the error is returned.
19473func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
19474	if tracing.IsEnabled() {
19475		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
19476		defer func() {
19477			sc := -1
19478			if iter.Response().Response.Response != nil {
19479				sc = iter.Response().Response.Response.StatusCode
19480			}
19481			tracing.EndSpan(ctx, sc, err)
19482		}()
19483	}
19484	iter.i++
19485	if iter.i < len(iter.page.Values()) {
19486		return nil
19487	}
19488	err = iter.page.NextWithContext(ctx)
19489	if err != nil {
19490		iter.i--
19491		return err
19492	}
19493	iter.i = 0
19494	return nil
19495}
19496
19497// Next advances to the next value.  If there was an error making
19498// the request the iterator does not advance and the error is returned.
19499// Deprecated: Use NextWithContext() instead.
19500func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
19501	return iter.NextWithContext(context.Background())
19502}
19503
19504// NotDone returns true if the enumeration should be started or is not yet complete.
19505func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
19506	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19507}
19508
19509// Response returns the raw server response from the last page request.
19510func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
19511	return iter.page.Response()
19512}
19513
19514// Value returns the current value or a zero-initialized value if the
19515// iterator has advanced beyond the end of the collection.
19516func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
19517	if !iter.page.NotDone() {
19518		return InterfaceTapConfiguration{}
19519	}
19520	return iter.page.Values()[iter.i]
19521}
19522
19523// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
19524func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
19525	return InterfaceTapConfigurationListResultIterator{page: page}
19526}
19527
19528// IsEmpty returns true if the ListResult contains no values.
19529func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
19530	return itclr.Value == nil || len(*itclr.Value) == 0
19531}
19532
19533// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
19534// It returns nil if no more results exist.
19535func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
19536	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
19537		return nil, nil
19538	}
19539	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19540		autorest.AsJSON(),
19541		autorest.AsGet(),
19542		autorest.WithBaseURL(to.String(itclr.NextLink)))
19543}
19544
19545// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
19546type InterfaceTapConfigurationListResultPage struct {
19547	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
19548	itclr InterfaceTapConfigurationListResult
19549}
19550
19551// NextWithContext advances to the next page of values.  If there was an error making
19552// the request the page does not advance and the error is returned.
19553func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
19554	if tracing.IsEnabled() {
19555		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
19556		defer func() {
19557			sc := -1
19558			if page.Response().Response.Response != nil {
19559				sc = page.Response().Response.Response.StatusCode
19560			}
19561			tracing.EndSpan(ctx, sc, err)
19562		}()
19563	}
19564	next, err := page.fn(ctx, page.itclr)
19565	if err != nil {
19566		return err
19567	}
19568	page.itclr = next
19569	return nil
19570}
19571
19572// Next advances to the next page of values.  If there was an error making
19573// the request the page does not advance and the error is returned.
19574// Deprecated: Use NextWithContext() instead.
19575func (page *InterfaceTapConfigurationListResultPage) Next() error {
19576	return page.NextWithContext(context.Background())
19577}
19578
19579// NotDone returns true if the page enumeration should be started or is not yet complete.
19580func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
19581	return !page.itclr.IsEmpty()
19582}
19583
19584// Response returns the raw server response from the last page request.
19585func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
19586	return page.itclr
19587}
19588
19589// Values returns the slice of values for the current page or nil if there are no values.
19590func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
19591	if page.itclr.IsEmpty() {
19592		return nil
19593	}
19594	return *page.itclr.Value
19595}
19596
19597// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
19598func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
19599	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
19600}
19601
19602// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
19603type InterfaceTapConfigurationPropertiesFormat struct {
19604	// VirtualNetworkTap - The reference to the Virtual Network Tap resource.
19605	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
19606	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19607	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19608}
19609
19610// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
19611// of a long-running operation.
19612type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
19613	azure.Future
19614}
19615
19616// Result returns the result of the asynchronous operation.
19617// If the operation has not completed it will return an error.
19618func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
19619	var done bool
19620	done, err = future.DoneWithContext(context.Background(), client)
19621	if err != nil {
19622		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19623		return
19624	}
19625	if !done {
19626		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
19627		return
19628	}
19629	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19630	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
19631		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
19632		if err != nil {
19633			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
19634		}
19635	}
19636	return
19637}
19638
19639// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
19640// long-running operation.
19641type InterfaceTapConfigurationsDeleteFuture struct {
19642	azure.Future
19643}
19644
19645// Result returns the result of the asynchronous operation.
19646// If the operation has not completed it will return an error.
19647func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
19648	var done bool
19649	done, err = future.DoneWithContext(context.Background(), client)
19650	if err != nil {
19651		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
19652		return
19653	}
19654	if !done {
19655		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
19656		return
19657	}
19658	ar.Response = future.Response()
19659	return
19660}
19661
19662// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call.
19663type IPAddressAvailabilityResult struct {
19664	autorest.Response `json:"-"`
19665	// Available - Private IP address availability.
19666	Available *bool `json:"available,omitempty"`
19667	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
19668	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
19669}
19670
19671// IPAllocation ipAllocation resource.
19672type IPAllocation struct {
19673	autorest.Response `json:"-"`
19674	// IPAllocationPropertiesFormat - Properties of the IpAllocation.
19675	*IPAllocationPropertiesFormat `json:"properties,omitempty"`
19676	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
19677	Etag *string `json:"etag,omitempty"`
19678	// ID - Resource ID.
19679	ID *string `json:"id,omitempty"`
19680	// Name - READ-ONLY; Resource name.
19681	Name *string `json:"name,omitempty"`
19682	// Type - READ-ONLY; Resource type.
19683	Type *string `json:"type,omitempty"`
19684	// Location - Resource location.
19685	Location *string `json:"location,omitempty"`
19686	// Tags - Resource tags.
19687	Tags map[string]*string `json:"tags"`
19688}
19689
19690// MarshalJSON is the custom marshaler for IPAllocation.
19691func (ia IPAllocation) MarshalJSON() ([]byte, error) {
19692	objectMap := make(map[string]interface{})
19693	if ia.IPAllocationPropertiesFormat != nil {
19694		objectMap["properties"] = ia.IPAllocationPropertiesFormat
19695	}
19696	if ia.ID != nil {
19697		objectMap["id"] = ia.ID
19698	}
19699	if ia.Location != nil {
19700		objectMap["location"] = ia.Location
19701	}
19702	if ia.Tags != nil {
19703		objectMap["tags"] = ia.Tags
19704	}
19705	return json.Marshal(objectMap)
19706}
19707
19708// UnmarshalJSON is the custom unmarshaler for IPAllocation struct.
19709func (ia *IPAllocation) UnmarshalJSON(body []byte) error {
19710	var m map[string]*json.RawMessage
19711	err := json.Unmarshal(body, &m)
19712	if err != nil {
19713		return err
19714	}
19715	for k, v := range m {
19716		switch k {
19717		case "properties":
19718			if v != nil {
19719				var IPAllocationPropertiesFormat IPAllocationPropertiesFormat
19720				err = json.Unmarshal(*v, &IPAllocationPropertiesFormat)
19721				if err != nil {
19722					return err
19723				}
19724				ia.IPAllocationPropertiesFormat = &IPAllocationPropertiesFormat
19725			}
19726		case "etag":
19727			if v != nil {
19728				var etag string
19729				err = json.Unmarshal(*v, &etag)
19730				if err != nil {
19731					return err
19732				}
19733				ia.Etag = &etag
19734			}
19735		case "id":
19736			if v != nil {
19737				var ID string
19738				err = json.Unmarshal(*v, &ID)
19739				if err != nil {
19740					return err
19741				}
19742				ia.ID = &ID
19743			}
19744		case "name":
19745			if v != nil {
19746				var name string
19747				err = json.Unmarshal(*v, &name)
19748				if err != nil {
19749					return err
19750				}
19751				ia.Name = &name
19752			}
19753		case "type":
19754			if v != nil {
19755				var typeVar string
19756				err = json.Unmarshal(*v, &typeVar)
19757				if err != nil {
19758					return err
19759				}
19760				ia.Type = &typeVar
19761			}
19762		case "location":
19763			if v != nil {
19764				var location string
19765				err = json.Unmarshal(*v, &location)
19766				if err != nil {
19767					return err
19768				}
19769				ia.Location = &location
19770			}
19771		case "tags":
19772			if v != nil {
19773				var tags map[string]*string
19774				err = json.Unmarshal(*v, &tags)
19775				if err != nil {
19776					return err
19777				}
19778				ia.Tags = tags
19779			}
19780		}
19781	}
19782
19783	return nil
19784}
19785
19786// IPAllocationListResult response for the ListIpAllocations API service call.
19787type IPAllocationListResult struct {
19788	autorest.Response `json:"-"`
19789	// Value - A list of IpAllocation resources.
19790	Value *[]IPAllocation `json:"value,omitempty"`
19791	// NextLink - The URL to get the next set of results.
19792	NextLink *string `json:"nextLink,omitempty"`
19793}
19794
19795// IPAllocationListResultIterator provides access to a complete listing of IPAllocation values.
19796type IPAllocationListResultIterator struct {
19797	i    int
19798	page IPAllocationListResultPage
19799}
19800
19801// NextWithContext advances to the next value.  If there was an error making
19802// the request the iterator does not advance and the error is returned.
19803func (iter *IPAllocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
19804	if tracing.IsEnabled() {
19805		ctx = tracing.StartSpan(ctx, fqdn+"/IPAllocationListResultIterator.NextWithContext")
19806		defer func() {
19807			sc := -1
19808			if iter.Response().Response.Response != nil {
19809				sc = iter.Response().Response.Response.StatusCode
19810			}
19811			tracing.EndSpan(ctx, sc, err)
19812		}()
19813	}
19814	iter.i++
19815	if iter.i < len(iter.page.Values()) {
19816		return nil
19817	}
19818	err = iter.page.NextWithContext(ctx)
19819	if err != nil {
19820		iter.i--
19821		return err
19822	}
19823	iter.i = 0
19824	return nil
19825}
19826
19827// Next advances to the next value.  If there was an error making
19828// the request the iterator does not advance and the error is returned.
19829// Deprecated: Use NextWithContext() instead.
19830func (iter *IPAllocationListResultIterator) Next() error {
19831	return iter.NextWithContext(context.Background())
19832}
19833
19834// NotDone returns true if the enumeration should be started or is not yet complete.
19835func (iter IPAllocationListResultIterator) NotDone() bool {
19836	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19837}
19838
19839// Response returns the raw server response from the last page request.
19840func (iter IPAllocationListResultIterator) Response() IPAllocationListResult {
19841	return iter.page.Response()
19842}
19843
19844// Value returns the current value or a zero-initialized value if the
19845// iterator has advanced beyond the end of the collection.
19846func (iter IPAllocationListResultIterator) Value() IPAllocation {
19847	if !iter.page.NotDone() {
19848		return IPAllocation{}
19849	}
19850	return iter.page.Values()[iter.i]
19851}
19852
19853// Creates a new instance of the IPAllocationListResultIterator type.
19854func NewIPAllocationListResultIterator(page IPAllocationListResultPage) IPAllocationListResultIterator {
19855	return IPAllocationListResultIterator{page: page}
19856}
19857
19858// IsEmpty returns true if the ListResult contains no values.
19859func (ialr IPAllocationListResult) IsEmpty() bool {
19860	return ialr.Value == nil || len(*ialr.Value) == 0
19861}
19862
19863// iPAllocationListResultPreparer prepares a request to retrieve the next set of results.
19864// It returns nil if no more results exist.
19865func (ialr IPAllocationListResult) iPAllocationListResultPreparer(ctx context.Context) (*http.Request, error) {
19866	if ialr.NextLink == nil || len(to.String(ialr.NextLink)) < 1 {
19867		return nil, nil
19868	}
19869	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19870		autorest.AsJSON(),
19871		autorest.AsGet(),
19872		autorest.WithBaseURL(to.String(ialr.NextLink)))
19873}
19874
19875// IPAllocationListResultPage contains a page of IPAllocation values.
19876type IPAllocationListResultPage struct {
19877	fn   func(context.Context, IPAllocationListResult) (IPAllocationListResult, error)
19878	ialr IPAllocationListResult
19879}
19880
19881// NextWithContext advances to the next page of values.  If there was an error making
19882// the request the page does not advance and the error is returned.
19883func (page *IPAllocationListResultPage) NextWithContext(ctx context.Context) (err error) {
19884	if tracing.IsEnabled() {
19885		ctx = tracing.StartSpan(ctx, fqdn+"/IPAllocationListResultPage.NextWithContext")
19886		defer func() {
19887			sc := -1
19888			if page.Response().Response.Response != nil {
19889				sc = page.Response().Response.Response.StatusCode
19890			}
19891			tracing.EndSpan(ctx, sc, err)
19892		}()
19893	}
19894	next, err := page.fn(ctx, page.ialr)
19895	if err != nil {
19896		return err
19897	}
19898	page.ialr = next
19899	return nil
19900}
19901
19902// Next advances to the next page of values.  If there was an error making
19903// the request the page does not advance and the error is returned.
19904// Deprecated: Use NextWithContext() instead.
19905func (page *IPAllocationListResultPage) Next() error {
19906	return page.NextWithContext(context.Background())
19907}
19908
19909// NotDone returns true if the page enumeration should be started or is not yet complete.
19910func (page IPAllocationListResultPage) NotDone() bool {
19911	return !page.ialr.IsEmpty()
19912}
19913
19914// Response returns the raw server response from the last page request.
19915func (page IPAllocationListResultPage) Response() IPAllocationListResult {
19916	return page.ialr
19917}
19918
19919// Values returns the slice of values for the current page or nil if there are no values.
19920func (page IPAllocationListResultPage) Values() []IPAllocation {
19921	if page.ialr.IsEmpty() {
19922		return nil
19923	}
19924	return *page.ialr.Value
19925}
19926
19927// Creates a new instance of the IPAllocationListResultPage type.
19928func NewIPAllocationListResultPage(getNextPage func(context.Context, IPAllocationListResult) (IPAllocationListResult, error)) IPAllocationListResultPage {
19929	return IPAllocationListResultPage{fn: getNextPage}
19930}
19931
19932// IPAllocationPropertiesFormat properties of the IpAllocation.
19933type IPAllocationPropertiesFormat struct {
19934	// Subnet - READ-ONLY; The Subnet that using the prefix of this IpAllocation resource.
19935	Subnet *SubResource `json:"subnet,omitempty"`
19936	// VirtualNetwork - READ-ONLY; The VirtualNetwork that using the prefix of this IpAllocation resource.
19937	VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"`
19938	// Type - The type for the IpAllocation. Possible values include: 'Undefined', 'Hypernet'
19939	Type IPAllocationType `json:"type,omitempty"`
19940	// Prefix - The address prefix for the IpAllocation.
19941	Prefix *string `json:"prefix,omitempty"`
19942	// PrefixLength - The address prefix length for the IpAllocation.
19943	PrefixLength *int32 `json:"prefixLength,omitempty"`
19944	// PrefixType - The address prefix Type for the IpAllocation. Possible values include: 'IPv4', 'IPv6'
19945	PrefixType IPVersion `json:"prefixType,omitempty"`
19946	// IpamAllocationID - The IPAM allocation ID.
19947	IpamAllocationID *string `json:"ipamAllocationId,omitempty"`
19948	// AllocationTags - IpAllocation tags.
19949	AllocationTags map[string]*string `json:"allocationTags"`
19950}
19951
19952// MarshalJSON is the custom marshaler for IPAllocationPropertiesFormat.
19953func (iapf IPAllocationPropertiesFormat) MarshalJSON() ([]byte, error) {
19954	objectMap := make(map[string]interface{})
19955	if iapf.Type != "" {
19956		objectMap["type"] = iapf.Type
19957	}
19958	if iapf.Prefix != nil {
19959		objectMap["prefix"] = iapf.Prefix
19960	}
19961	if iapf.PrefixLength != nil {
19962		objectMap["prefixLength"] = iapf.PrefixLength
19963	}
19964	if iapf.PrefixType != "" {
19965		objectMap["prefixType"] = iapf.PrefixType
19966	}
19967	if iapf.IpamAllocationID != nil {
19968		objectMap["ipamAllocationId"] = iapf.IpamAllocationID
19969	}
19970	if iapf.AllocationTags != nil {
19971		objectMap["allocationTags"] = iapf.AllocationTags
19972	}
19973	return json.Marshal(objectMap)
19974}
19975
19976// IPAllocationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19977// long-running operation.
19978type IPAllocationsCreateOrUpdateFuture struct {
19979	azure.Future
19980}
19981
19982// Result returns the result of the asynchronous operation.
19983// If the operation has not completed it will return an error.
19984func (future *IPAllocationsCreateOrUpdateFuture) Result(client IPAllocationsClient) (ia IPAllocation, err error) {
19985	var done bool
19986	done, err = future.DoneWithContext(context.Background(), client)
19987	if err != nil {
19988		err = autorest.NewErrorWithError(err, "network.IPAllocationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19989		return
19990	}
19991	if !done {
19992		err = azure.NewAsyncOpIncompleteError("network.IPAllocationsCreateOrUpdateFuture")
19993		return
19994	}
19995	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19996	if ia.Response.Response, err = future.GetResult(sender); err == nil && ia.Response.Response.StatusCode != http.StatusNoContent {
19997		ia, err = client.CreateOrUpdateResponder(ia.Response.Response)
19998		if err != nil {
19999			err = autorest.NewErrorWithError(err, "network.IPAllocationsCreateOrUpdateFuture", "Result", ia.Response.Response, "Failure responding to request")
20000		}
20001	}
20002	return
20003}
20004
20005// IPAllocationsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20006// operation.
20007type IPAllocationsDeleteFuture struct {
20008	azure.Future
20009}
20010
20011// Result returns the result of the asynchronous operation.
20012// If the operation has not completed it will return an error.
20013func (future *IPAllocationsDeleteFuture) Result(client IPAllocationsClient) (ar autorest.Response, err error) {
20014	var done bool
20015	done, err = future.DoneWithContext(context.Background(), client)
20016	if err != nil {
20017		err = autorest.NewErrorWithError(err, "network.IPAllocationsDeleteFuture", "Result", future.Response(), "Polling failure")
20018		return
20019	}
20020	if !done {
20021		err = azure.NewAsyncOpIncompleteError("network.IPAllocationsDeleteFuture")
20022		return
20023	}
20024	ar.Response = future.Response()
20025	return
20026}
20027
20028// IPConfiguration IP configuration.
20029type IPConfiguration struct {
20030	// IPConfigurationPropertiesFormat - Properties of the IP configuration.
20031	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
20032	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
20033	Name *string `json:"name,omitempty"`
20034	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20035	Etag *string `json:"etag,omitempty"`
20036	// ID - Resource ID.
20037	ID *string `json:"id,omitempty"`
20038}
20039
20040// MarshalJSON is the custom marshaler for IPConfiguration.
20041func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
20042	objectMap := make(map[string]interface{})
20043	if ic.IPConfigurationPropertiesFormat != nil {
20044		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
20045	}
20046	if ic.Name != nil {
20047		objectMap["name"] = ic.Name
20048	}
20049	if ic.ID != nil {
20050		objectMap["id"] = ic.ID
20051	}
20052	return json.Marshal(objectMap)
20053}
20054
20055// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
20056func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
20057	var m map[string]*json.RawMessage
20058	err := json.Unmarshal(body, &m)
20059	if err != nil {
20060		return err
20061	}
20062	for k, v := range m {
20063		switch k {
20064		case "properties":
20065			if v != nil {
20066				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
20067				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
20068				if err != nil {
20069					return err
20070				}
20071				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
20072			}
20073		case "name":
20074			if v != nil {
20075				var name string
20076				err = json.Unmarshal(*v, &name)
20077				if err != nil {
20078					return err
20079				}
20080				ic.Name = &name
20081			}
20082		case "etag":
20083			if v != nil {
20084				var etag string
20085				err = json.Unmarshal(*v, &etag)
20086				if err != nil {
20087					return err
20088				}
20089				ic.Etag = &etag
20090			}
20091		case "id":
20092			if v != nil {
20093				var ID string
20094				err = json.Unmarshal(*v, &ID)
20095				if err != nil {
20096					return err
20097				}
20098				ic.ID = &ID
20099			}
20100		}
20101	}
20102
20103	return nil
20104}
20105
20106// IPConfigurationBgpPeeringAddress properties of IPConfigurationBgpPeeringAddress.
20107type IPConfigurationBgpPeeringAddress struct {
20108	// IpconfigurationID - The ID of IP configuration which belongs to gateway.
20109	IpconfigurationID *string `json:"ipconfigurationId,omitempty"`
20110	// DefaultBgpIPAddresses - READ-ONLY; The list of default BGP peering addresses which belong to IP configuration.
20111	DefaultBgpIPAddresses *[]string `json:"defaultBgpIpAddresses,omitempty"`
20112	// CustomBgpIPAddresses - The list of custom BGP peering addresses which belong to IP configuration.
20113	CustomBgpIPAddresses *[]string `json:"customBgpIpAddresses,omitempty"`
20114	// TunnelIPAddresses - READ-ONLY; The list of tunnel public IP addresses which belong to IP configuration.
20115	TunnelIPAddresses *[]string `json:"tunnelIpAddresses,omitempty"`
20116}
20117
20118// IPConfigurationProfile IP configuration profile child resource.
20119type IPConfigurationProfile struct {
20120	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
20121	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
20122	// Name - The name of the resource. This name can be used to access the resource.
20123	Name *string `json:"name,omitempty"`
20124	// Type - READ-ONLY; Sub Resource type.
20125	Type *string `json:"type,omitempty"`
20126	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20127	Etag *string `json:"etag,omitempty"`
20128	// ID - Resource ID.
20129	ID *string `json:"id,omitempty"`
20130}
20131
20132// MarshalJSON is the custom marshaler for IPConfigurationProfile.
20133func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
20134	objectMap := make(map[string]interface{})
20135	if icp.IPConfigurationProfilePropertiesFormat != nil {
20136		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
20137	}
20138	if icp.Name != nil {
20139		objectMap["name"] = icp.Name
20140	}
20141	if icp.ID != nil {
20142		objectMap["id"] = icp.ID
20143	}
20144	return json.Marshal(objectMap)
20145}
20146
20147// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
20148func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
20149	var m map[string]*json.RawMessage
20150	err := json.Unmarshal(body, &m)
20151	if err != nil {
20152		return err
20153	}
20154	for k, v := range m {
20155		switch k {
20156		case "properties":
20157			if v != nil {
20158				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
20159				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
20160				if err != nil {
20161					return err
20162				}
20163				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
20164			}
20165		case "name":
20166			if v != nil {
20167				var name string
20168				err = json.Unmarshal(*v, &name)
20169				if err != nil {
20170					return err
20171				}
20172				icp.Name = &name
20173			}
20174		case "type":
20175			if v != nil {
20176				var typeVar string
20177				err = json.Unmarshal(*v, &typeVar)
20178				if err != nil {
20179					return err
20180				}
20181				icp.Type = &typeVar
20182			}
20183		case "etag":
20184			if v != nil {
20185				var etag string
20186				err = json.Unmarshal(*v, &etag)
20187				if err != nil {
20188					return err
20189				}
20190				icp.Etag = &etag
20191			}
20192		case "id":
20193			if v != nil {
20194				var ID string
20195				err = json.Unmarshal(*v, &ID)
20196				if err != nil {
20197					return err
20198				}
20199				icp.ID = &ID
20200			}
20201		}
20202	}
20203
20204	return nil
20205}
20206
20207// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
20208type IPConfigurationProfilePropertiesFormat struct {
20209	// Subnet - The reference to the subnet resource to create a container network interface ip configuration.
20210	Subnet *Subnet `json:"subnet,omitempty"`
20211	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20212	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20213}
20214
20215// IPConfigurationPropertiesFormat properties of IP configuration.
20216type IPConfigurationPropertiesFormat struct {
20217	// PrivateIPAddress - The private IP address of the IP configuration.
20218	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
20219	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
20220	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
20221	// Subnet - The reference to the subnet resource.
20222	Subnet *Subnet `json:"subnet,omitempty"`
20223	// PublicIPAddress - The reference to the public IP resource.
20224	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
20225	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20226	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20227}
20228
20229// IPGroup the IpGroups resource information.
20230type IPGroup struct {
20231	autorest.Response `json:"-"`
20232	// IPGroupPropertiesFormat - Properties of the IpGroups.
20233	*IPGroupPropertiesFormat `json:"properties,omitempty"`
20234	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20235	Etag *string `json:"etag,omitempty"`
20236	// ID - Resource ID.
20237	ID *string `json:"id,omitempty"`
20238	// Name - READ-ONLY; Resource name.
20239	Name *string `json:"name,omitempty"`
20240	// Type - READ-ONLY; Resource type.
20241	Type *string `json:"type,omitempty"`
20242	// Location - Resource location.
20243	Location *string `json:"location,omitempty"`
20244	// Tags - Resource tags.
20245	Tags map[string]*string `json:"tags"`
20246}
20247
20248// MarshalJSON is the custom marshaler for IPGroup.
20249func (ig IPGroup) MarshalJSON() ([]byte, error) {
20250	objectMap := make(map[string]interface{})
20251	if ig.IPGroupPropertiesFormat != nil {
20252		objectMap["properties"] = ig.IPGroupPropertiesFormat
20253	}
20254	if ig.ID != nil {
20255		objectMap["id"] = ig.ID
20256	}
20257	if ig.Location != nil {
20258		objectMap["location"] = ig.Location
20259	}
20260	if ig.Tags != nil {
20261		objectMap["tags"] = ig.Tags
20262	}
20263	return json.Marshal(objectMap)
20264}
20265
20266// UnmarshalJSON is the custom unmarshaler for IPGroup struct.
20267func (ig *IPGroup) UnmarshalJSON(body []byte) error {
20268	var m map[string]*json.RawMessage
20269	err := json.Unmarshal(body, &m)
20270	if err != nil {
20271		return err
20272	}
20273	for k, v := range m {
20274		switch k {
20275		case "properties":
20276			if v != nil {
20277				var IPGroupPropertiesFormat IPGroupPropertiesFormat
20278				err = json.Unmarshal(*v, &IPGroupPropertiesFormat)
20279				if err != nil {
20280					return err
20281				}
20282				ig.IPGroupPropertiesFormat = &IPGroupPropertiesFormat
20283			}
20284		case "etag":
20285			if v != nil {
20286				var etag string
20287				err = json.Unmarshal(*v, &etag)
20288				if err != nil {
20289					return err
20290				}
20291				ig.Etag = &etag
20292			}
20293		case "id":
20294			if v != nil {
20295				var ID string
20296				err = json.Unmarshal(*v, &ID)
20297				if err != nil {
20298					return err
20299				}
20300				ig.ID = &ID
20301			}
20302		case "name":
20303			if v != nil {
20304				var name string
20305				err = json.Unmarshal(*v, &name)
20306				if err != nil {
20307					return err
20308				}
20309				ig.Name = &name
20310			}
20311		case "type":
20312			if v != nil {
20313				var typeVar string
20314				err = json.Unmarshal(*v, &typeVar)
20315				if err != nil {
20316					return err
20317				}
20318				ig.Type = &typeVar
20319			}
20320		case "location":
20321			if v != nil {
20322				var location string
20323				err = json.Unmarshal(*v, &location)
20324				if err != nil {
20325					return err
20326				}
20327				ig.Location = &location
20328			}
20329		case "tags":
20330			if v != nil {
20331				var tags map[string]*string
20332				err = json.Unmarshal(*v, &tags)
20333				if err != nil {
20334					return err
20335				}
20336				ig.Tags = tags
20337			}
20338		}
20339	}
20340
20341	return nil
20342}
20343
20344// IPGroupListResult response for the ListIpGroups API service call.
20345type IPGroupListResult struct {
20346	autorest.Response `json:"-"`
20347	// Value - The list of IpGroups information resources.
20348	Value *[]IPGroup `json:"value,omitempty"`
20349	// NextLink - URL to get the next set of results.
20350	NextLink *string `json:"nextLink,omitempty"`
20351}
20352
20353// IPGroupListResultIterator provides access to a complete listing of IPGroup values.
20354type IPGroupListResultIterator struct {
20355	i    int
20356	page IPGroupListResultPage
20357}
20358
20359// NextWithContext advances to the next value.  If there was an error making
20360// the request the iterator does not advance and the error is returned.
20361func (iter *IPGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
20362	if tracing.IsEnabled() {
20363		ctx = tracing.StartSpan(ctx, fqdn+"/IPGroupListResultIterator.NextWithContext")
20364		defer func() {
20365			sc := -1
20366			if iter.Response().Response.Response != nil {
20367				sc = iter.Response().Response.Response.StatusCode
20368			}
20369			tracing.EndSpan(ctx, sc, err)
20370		}()
20371	}
20372	iter.i++
20373	if iter.i < len(iter.page.Values()) {
20374		return nil
20375	}
20376	err = iter.page.NextWithContext(ctx)
20377	if err != nil {
20378		iter.i--
20379		return err
20380	}
20381	iter.i = 0
20382	return nil
20383}
20384
20385// Next advances to the next value.  If there was an error making
20386// the request the iterator does not advance and the error is returned.
20387// Deprecated: Use NextWithContext() instead.
20388func (iter *IPGroupListResultIterator) Next() error {
20389	return iter.NextWithContext(context.Background())
20390}
20391
20392// NotDone returns true if the enumeration should be started or is not yet complete.
20393func (iter IPGroupListResultIterator) NotDone() bool {
20394	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20395}
20396
20397// Response returns the raw server response from the last page request.
20398func (iter IPGroupListResultIterator) Response() IPGroupListResult {
20399	return iter.page.Response()
20400}
20401
20402// Value returns the current value or a zero-initialized value if the
20403// iterator has advanced beyond the end of the collection.
20404func (iter IPGroupListResultIterator) Value() IPGroup {
20405	if !iter.page.NotDone() {
20406		return IPGroup{}
20407	}
20408	return iter.page.Values()[iter.i]
20409}
20410
20411// Creates a new instance of the IPGroupListResultIterator type.
20412func NewIPGroupListResultIterator(page IPGroupListResultPage) IPGroupListResultIterator {
20413	return IPGroupListResultIterator{page: page}
20414}
20415
20416// IsEmpty returns true if the ListResult contains no values.
20417func (iglr IPGroupListResult) IsEmpty() bool {
20418	return iglr.Value == nil || len(*iglr.Value) == 0
20419}
20420
20421// iPGroupListResultPreparer prepares a request to retrieve the next set of results.
20422// It returns nil if no more results exist.
20423func (iglr IPGroupListResult) iPGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
20424	if iglr.NextLink == nil || len(to.String(iglr.NextLink)) < 1 {
20425		return nil, nil
20426	}
20427	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20428		autorest.AsJSON(),
20429		autorest.AsGet(),
20430		autorest.WithBaseURL(to.String(iglr.NextLink)))
20431}
20432
20433// IPGroupListResultPage contains a page of IPGroup values.
20434type IPGroupListResultPage struct {
20435	fn   func(context.Context, IPGroupListResult) (IPGroupListResult, error)
20436	iglr IPGroupListResult
20437}
20438
20439// NextWithContext advances to the next page of values.  If there was an error making
20440// the request the page does not advance and the error is returned.
20441func (page *IPGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
20442	if tracing.IsEnabled() {
20443		ctx = tracing.StartSpan(ctx, fqdn+"/IPGroupListResultPage.NextWithContext")
20444		defer func() {
20445			sc := -1
20446			if page.Response().Response.Response != nil {
20447				sc = page.Response().Response.Response.StatusCode
20448			}
20449			tracing.EndSpan(ctx, sc, err)
20450		}()
20451	}
20452	next, err := page.fn(ctx, page.iglr)
20453	if err != nil {
20454		return err
20455	}
20456	page.iglr = next
20457	return nil
20458}
20459
20460// Next advances to the next page of values.  If there was an error making
20461// the request the page does not advance and the error is returned.
20462// Deprecated: Use NextWithContext() instead.
20463func (page *IPGroupListResultPage) Next() error {
20464	return page.NextWithContext(context.Background())
20465}
20466
20467// NotDone returns true if the page enumeration should be started or is not yet complete.
20468func (page IPGroupListResultPage) NotDone() bool {
20469	return !page.iglr.IsEmpty()
20470}
20471
20472// Response returns the raw server response from the last page request.
20473func (page IPGroupListResultPage) Response() IPGroupListResult {
20474	return page.iglr
20475}
20476
20477// Values returns the slice of values for the current page or nil if there are no values.
20478func (page IPGroupListResultPage) Values() []IPGroup {
20479	if page.iglr.IsEmpty() {
20480		return nil
20481	}
20482	return *page.iglr.Value
20483}
20484
20485// Creates a new instance of the IPGroupListResultPage type.
20486func NewIPGroupListResultPage(getNextPage func(context.Context, IPGroupListResult) (IPGroupListResult, error)) IPGroupListResultPage {
20487	return IPGroupListResultPage{fn: getNextPage}
20488}
20489
20490// IPGroupPropertiesFormat the IpGroups property information.
20491type IPGroupPropertiesFormat struct {
20492	// ProvisioningState - READ-ONLY; The provisioning state of the IpGroups resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20493	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20494	// IPAddresses - IpAddresses/IpAddressPrefixes in the IpGroups resource.
20495	IPAddresses *[]string `json:"ipAddresses,omitempty"`
20496	// Firewalls - READ-ONLY; List of references to Azure resources that this IpGroups is associated with.
20497	Firewalls *[]SubResource `json:"firewalls,omitempty"`
20498}
20499
20500// IPGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
20501// operation.
20502type IPGroupsCreateOrUpdateFuture struct {
20503	azure.Future
20504}
20505
20506// Result returns the result of the asynchronous operation.
20507// If the operation has not completed it will return an error.
20508func (future *IPGroupsCreateOrUpdateFuture) Result(client IPGroupsClient) (ig IPGroup, err error) {
20509	var done bool
20510	done, err = future.DoneWithContext(context.Background(), client)
20511	if err != nil {
20512		err = autorest.NewErrorWithError(err, "network.IPGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20513		return
20514	}
20515	if !done {
20516		err = azure.NewAsyncOpIncompleteError("network.IPGroupsCreateOrUpdateFuture")
20517		return
20518	}
20519	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20520	if ig.Response.Response, err = future.GetResult(sender); err == nil && ig.Response.Response.StatusCode != http.StatusNoContent {
20521		ig, err = client.CreateOrUpdateResponder(ig.Response.Response)
20522		if err != nil {
20523			err = autorest.NewErrorWithError(err, "network.IPGroupsCreateOrUpdateFuture", "Result", ig.Response.Response, "Failure responding to request")
20524		}
20525	}
20526	return
20527}
20528
20529// IPGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20530// operation.
20531type IPGroupsDeleteFuture struct {
20532	azure.Future
20533}
20534
20535// Result returns the result of the asynchronous operation.
20536// If the operation has not completed it will return an error.
20537func (future *IPGroupsDeleteFuture) Result(client IPGroupsClient) (ar autorest.Response, err error) {
20538	var done bool
20539	done, err = future.DoneWithContext(context.Background(), client)
20540	if err != nil {
20541		err = autorest.NewErrorWithError(err, "network.IPGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
20542		return
20543	}
20544	if !done {
20545		err = azure.NewAsyncOpIncompleteError("network.IPGroupsDeleteFuture")
20546		return
20547	}
20548	ar.Response = future.Response()
20549	return
20550}
20551
20552// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection.
20553type IpsecPolicy struct {
20554	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
20555	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
20556	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
20557	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
20558	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
20559	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
20560	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
20561	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
20562	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
20563	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
20564	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
20565	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
20566	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
20567	DhGroup DhGroup `json:"dhGroup,omitempty"`
20568	// PfsGroup - The Pfs Group used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
20569	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
20570}
20571
20572// IPTag contains the IpTag associated with the object.
20573type IPTag struct {
20574	// IPTagType - The IP tag type. Example: FirstPartyUsage.
20575	IPTagType *string `json:"ipTagType,omitempty"`
20576	// Tag - The value of the IP tag associated with the public IP. Example: SQL.
20577	Tag *string `json:"tag,omitempty"`
20578}
20579
20580// Ipv6CircuitConnectionConfig iPv6 Circuit Connection properties for global reach.
20581type Ipv6CircuitConnectionConfig struct {
20582	// AddressPrefix - /125 IP address space to carve out customer addresses for global reach.
20583	AddressPrefix *string `json:"addressPrefix,omitempty"`
20584	// CircuitConnectionStatus - READ-ONLY; Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
20585	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
20586}
20587
20588// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
20589type Ipv6ExpressRouteCircuitPeeringConfig struct {
20590	// PrimaryPeerAddressPrefix - The primary address prefix.
20591	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
20592	// SecondaryPeerAddressPrefix - The secondary address prefix.
20593	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
20594	// MicrosoftPeeringConfig - The Microsoft peering configuration.
20595	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
20596	// RouteFilter - The reference to the RouteFilter resource.
20597	RouteFilter *SubResource `json:"routeFilter,omitempty"`
20598	// State - The state of peering. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
20599	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
20600}
20601
20602// ListHubRouteTablesResult list of RouteTables and a URL nextLink to get the next set of results.
20603type ListHubRouteTablesResult struct {
20604	autorest.Response `json:"-"`
20605	// Value - List of RouteTables.
20606	Value *[]HubRouteTable `json:"value,omitempty"`
20607	// NextLink - URL to get the next set of operation list results if there are any.
20608	NextLink *string `json:"nextLink,omitempty"`
20609}
20610
20611// ListHubRouteTablesResultIterator provides access to a complete listing of HubRouteTable values.
20612type ListHubRouteTablesResultIterator struct {
20613	i    int
20614	page ListHubRouteTablesResultPage
20615}
20616
20617// NextWithContext advances to the next value.  If there was an error making
20618// the request the iterator does not advance and the error is returned.
20619func (iter *ListHubRouteTablesResultIterator) NextWithContext(ctx context.Context) (err error) {
20620	if tracing.IsEnabled() {
20621		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubRouteTablesResultIterator.NextWithContext")
20622		defer func() {
20623			sc := -1
20624			if iter.Response().Response.Response != nil {
20625				sc = iter.Response().Response.Response.StatusCode
20626			}
20627			tracing.EndSpan(ctx, sc, err)
20628		}()
20629	}
20630	iter.i++
20631	if iter.i < len(iter.page.Values()) {
20632		return nil
20633	}
20634	err = iter.page.NextWithContext(ctx)
20635	if err != nil {
20636		iter.i--
20637		return err
20638	}
20639	iter.i = 0
20640	return nil
20641}
20642
20643// Next advances to the next value.  If there was an error making
20644// the request the iterator does not advance and the error is returned.
20645// Deprecated: Use NextWithContext() instead.
20646func (iter *ListHubRouteTablesResultIterator) Next() error {
20647	return iter.NextWithContext(context.Background())
20648}
20649
20650// NotDone returns true if the enumeration should be started or is not yet complete.
20651func (iter ListHubRouteTablesResultIterator) NotDone() bool {
20652	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20653}
20654
20655// Response returns the raw server response from the last page request.
20656func (iter ListHubRouteTablesResultIterator) Response() ListHubRouteTablesResult {
20657	return iter.page.Response()
20658}
20659
20660// Value returns the current value or a zero-initialized value if the
20661// iterator has advanced beyond the end of the collection.
20662func (iter ListHubRouteTablesResultIterator) Value() HubRouteTable {
20663	if !iter.page.NotDone() {
20664		return HubRouteTable{}
20665	}
20666	return iter.page.Values()[iter.i]
20667}
20668
20669// Creates a new instance of the ListHubRouteTablesResultIterator type.
20670func NewListHubRouteTablesResultIterator(page ListHubRouteTablesResultPage) ListHubRouteTablesResultIterator {
20671	return ListHubRouteTablesResultIterator{page: page}
20672}
20673
20674// IsEmpty returns true if the ListResult contains no values.
20675func (lhrtr ListHubRouteTablesResult) IsEmpty() bool {
20676	return lhrtr.Value == nil || len(*lhrtr.Value) == 0
20677}
20678
20679// listHubRouteTablesResultPreparer prepares a request to retrieve the next set of results.
20680// It returns nil if no more results exist.
20681func (lhrtr ListHubRouteTablesResult) listHubRouteTablesResultPreparer(ctx context.Context) (*http.Request, error) {
20682	if lhrtr.NextLink == nil || len(to.String(lhrtr.NextLink)) < 1 {
20683		return nil, nil
20684	}
20685	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20686		autorest.AsJSON(),
20687		autorest.AsGet(),
20688		autorest.WithBaseURL(to.String(lhrtr.NextLink)))
20689}
20690
20691// ListHubRouteTablesResultPage contains a page of HubRouteTable values.
20692type ListHubRouteTablesResultPage struct {
20693	fn    func(context.Context, ListHubRouteTablesResult) (ListHubRouteTablesResult, error)
20694	lhrtr ListHubRouteTablesResult
20695}
20696
20697// NextWithContext advances to the next page of values.  If there was an error making
20698// the request the page does not advance and the error is returned.
20699func (page *ListHubRouteTablesResultPage) NextWithContext(ctx context.Context) (err error) {
20700	if tracing.IsEnabled() {
20701		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubRouteTablesResultPage.NextWithContext")
20702		defer func() {
20703			sc := -1
20704			if page.Response().Response.Response != nil {
20705				sc = page.Response().Response.Response.StatusCode
20706			}
20707			tracing.EndSpan(ctx, sc, err)
20708		}()
20709	}
20710	next, err := page.fn(ctx, page.lhrtr)
20711	if err != nil {
20712		return err
20713	}
20714	page.lhrtr = next
20715	return nil
20716}
20717
20718// Next advances to the next page of values.  If there was an error making
20719// the request the page does not advance and the error is returned.
20720// Deprecated: Use NextWithContext() instead.
20721func (page *ListHubRouteTablesResultPage) Next() error {
20722	return page.NextWithContext(context.Background())
20723}
20724
20725// NotDone returns true if the page enumeration should be started or is not yet complete.
20726func (page ListHubRouteTablesResultPage) NotDone() bool {
20727	return !page.lhrtr.IsEmpty()
20728}
20729
20730// Response returns the raw server response from the last page request.
20731func (page ListHubRouteTablesResultPage) Response() ListHubRouteTablesResult {
20732	return page.lhrtr
20733}
20734
20735// Values returns the slice of values for the current page or nil if there are no values.
20736func (page ListHubRouteTablesResultPage) Values() []HubRouteTable {
20737	if page.lhrtr.IsEmpty() {
20738		return nil
20739	}
20740	return *page.lhrtr.Value
20741}
20742
20743// Creates a new instance of the ListHubRouteTablesResultPage type.
20744func NewListHubRouteTablesResultPage(getNextPage func(context.Context, ListHubRouteTablesResult) (ListHubRouteTablesResult, error)) ListHubRouteTablesResultPage {
20745	return ListHubRouteTablesResultPage{fn: getNextPage}
20746}
20747
20748// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
20749// the next set of results.
20750type ListHubVirtualNetworkConnectionsResult struct {
20751	autorest.Response `json:"-"`
20752	// Value - List of HubVirtualNetworkConnections.
20753	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
20754	// NextLink - URL to get the next set of operation list results if there are any.
20755	NextLink *string `json:"nextLink,omitempty"`
20756}
20757
20758// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
20759// HubVirtualNetworkConnection values.
20760type ListHubVirtualNetworkConnectionsResultIterator struct {
20761	i    int
20762	page ListHubVirtualNetworkConnectionsResultPage
20763}
20764
20765// NextWithContext advances to the next value.  If there was an error making
20766// the request the iterator does not advance and the error is returned.
20767func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
20768	if tracing.IsEnabled() {
20769		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
20770		defer func() {
20771			sc := -1
20772			if iter.Response().Response.Response != nil {
20773				sc = iter.Response().Response.Response.StatusCode
20774			}
20775			tracing.EndSpan(ctx, sc, err)
20776		}()
20777	}
20778	iter.i++
20779	if iter.i < len(iter.page.Values()) {
20780		return nil
20781	}
20782	err = iter.page.NextWithContext(ctx)
20783	if err != nil {
20784		iter.i--
20785		return err
20786	}
20787	iter.i = 0
20788	return nil
20789}
20790
20791// Next advances to the next value.  If there was an error making
20792// the request the iterator does not advance and the error is returned.
20793// Deprecated: Use NextWithContext() instead.
20794func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
20795	return iter.NextWithContext(context.Background())
20796}
20797
20798// NotDone returns true if the enumeration should be started or is not yet complete.
20799func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
20800	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20801}
20802
20803// Response returns the raw server response from the last page request.
20804func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
20805	return iter.page.Response()
20806}
20807
20808// Value returns the current value or a zero-initialized value if the
20809// iterator has advanced beyond the end of the collection.
20810func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
20811	if !iter.page.NotDone() {
20812		return HubVirtualNetworkConnection{}
20813	}
20814	return iter.page.Values()[iter.i]
20815}
20816
20817// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
20818func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
20819	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
20820}
20821
20822// IsEmpty returns true if the ListResult contains no values.
20823func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
20824	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
20825}
20826
20827// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
20828// It returns nil if no more results exist.
20829func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
20830	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
20831		return nil, nil
20832	}
20833	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20834		autorest.AsJSON(),
20835		autorest.AsGet(),
20836		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
20837}
20838
20839// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
20840type ListHubVirtualNetworkConnectionsResultPage struct {
20841	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
20842	lhvncr ListHubVirtualNetworkConnectionsResult
20843}
20844
20845// NextWithContext advances to the next page of values.  If there was an error making
20846// the request the page does not advance and the error is returned.
20847func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
20848	if tracing.IsEnabled() {
20849		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
20850		defer func() {
20851			sc := -1
20852			if page.Response().Response.Response != nil {
20853				sc = page.Response().Response.Response.StatusCode
20854			}
20855			tracing.EndSpan(ctx, sc, err)
20856		}()
20857	}
20858	next, err := page.fn(ctx, page.lhvncr)
20859	if err != nil {
20860		return err
20861	}
20862	page.lhvncr = next
20863	return nil
20864}
20865
20866// Next advances to the next page of values.  If there was an error making
20867// the request the page does not advance and the error is returned.
20868// Deprecated: Use NextWithContext() instead.
20869func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
20870	return page.NextWithContext(context.Background())
20871}
20872
20873// NotDone returns true if the page enumeration should be started or is not yet complete.
20874func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
20875	return !page.lhvncr.IsEmpty()
20876}
20877
20878// Response returns the raw server response from the last page request.
20879func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
20880	return page.lhvncr
20881}
20882
20883// Values returns the slice of values for the current page or nil if there are no values.
20884func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
20885	if page.lhvncr.IsEmpty() {
20886		return nil
20887	}
20888	return *page.lhvncr.Value
20889}
20890
20891// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
20892func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
20893	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
20894}
20895
20896// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
20897// P2SVpnGateways and a URL nextLink to get the next set of results.
20898type ListP2SVpnGatewaysResult struct {
20899	autorest.Response `json:"-"`
20900	// Value - List of P2SVpnGateways.
20901	Value *[]P2SVpnGateway `json:"value,omitempty"`
20902	// NextLink - URL to get the next set of operation list results if there are any.
20903	NextLink *string `json:"nextLink,omitempty"`
20904}
20905
20906// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
20907type ListP2SVpnGatewaysResultIterator struct {
20908	i    int
20909	page ListP2SVpnGatewaysResultPage
20910}
20911
20912// NextWithContext advances to the next value.  If there was an error making
20913// the request the iterator does not advance and the error is returned.
20914func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
20915	if tracing.IsEnabled() {
20916		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
20917		defer func() {
20918			sc := -1
20919			if iter.Response().Response.Response != nil {
20920				sc = iter.Response().Response.Response.StatusCode
20921			}
20922			tracing.EndSpan(ctx, sc, err)
20923		}()
20924	}
20925	iter.i++
20926	if iter.i < len(iter.page.Values()) {
20927		return nil
20928	}
20929	err = iter.page.NextWithContext(ctx)
20930	if err != nil {
20931		iter.i--
20932		return err
20933	}
20934	iter.i = 0
20935	return nil
20936}
20937
20938// Next advances to the next value.  If there was an error making
20939// the request the iterator does not advance and the error is returned.
20940// Deprecated: Use NextWithContext() instead.
20941func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
20942	return iter.NextWithContext(context.Background())
20943}
20944
20945// NotDone returns true if the enumeration should be started or is not yet complete.
20946func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
20947	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20948}
20949
20950// Response returns the raw server response from the last page request.
20951func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
20952	return iter.page.Response()
20953}
20954
20955// Value returns the current value or a zero-initialized value if the
20956// iterator has advanced beyond the end of the collection.
20957func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
20958	if !iter.page.NotDone() {
20959		return P2SVpnGateway{}
20960	}
20961	return iter.page.Values()[iter.i]
20962}
20963
20964// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
20965func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
20966	return ListP2SVpnGatewaysResultIterator{page: page}
20967}
20968
20969// IsEmpty returns true if the ListResult contains no values.
20970func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
20971	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
20972}
20973
20974// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
20975// It returns nil if no more results exist.
20976func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
20977	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
20978		return nil, nil
20979	}
20980	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20981		autorest.AsJSON(),
20982		autorest.AsGet(),
20983		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
20984}
20985
20986// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
20987type ListP2SVpnGatewaysResultPage struct {
20988	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
20989	lpvgr ListP2SVpnGatewaysResult
20990}
20991
20992// NextWithContext advances to the next page of values.  If there was an error making
20993// the request the page does not advance and the error is returned.
20994func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
20995	if tracing.IsEnabled() {
20996		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
20997		defer func() {
20998			sc := -1
20999			if page.Response().Response.Response != nil {
21000				sc = page.Response().Response.Response.StatusCode
21001			}
21002			tracing.EndSpan(ctx, sc, err)
21003		}()
21004	}
21005	next, err := page.fn(ctx, page.lpvgr)
21006	if err != nil {
21007		return err
21008	}
21009	page.lpvgr = next
21010	return nil
21011}
21012
21013// Next advances to the next page of values.  If there was an error making
21014// the request the page does not advance and the error is returned.
21015// Deprecated: Use NextWithContext() instead.
21016func (page *ListP2SVpnGatewaysResultPage) Next() error {
21017	return page.NextWithContext(context.Background())
21018}
21019
21020// NotDone returns true if the page enumeration should be started or is not yet complete.
21021func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
21022	return !page.lpvgr.IsEmpty()
21023}
21024
21025// Response returns the raw server response from the last page request.
21026func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
21027	return page.lpvgr
21028}
21029
21030// Values returns the slice of values for the current page or nil if there are no values.
21031func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
21032	if page.lpvgr.IsEmpty() {
21033		return nil
21034	}
21035	return *page.lpvgr.Value
21036}
21037
21038// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
21039func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
21040	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
21041}
21042
21043// ListString ...
21044type ListString struct {
21045	autorest.Response `json:"-"`
21046	Value             *[]string `json:"value,omitempty"`
21047}
21048
21049// ListVirtualHubBgpConnectionResults virtualHubBgpConnections list.
21050type ListVirtualHubBgpConnectionResults struct {
21051	autorest.Response `json:"-"`
21052	// Value - The list of VirtualHubBgpConnections.
21053	Value *[]BgpConnection `json:"value,omitempty"`
21054	// NextLink - URL to get the next set of results.
21055	NextLink *string `json:"nextLink,omitempty"`
21056}
21057
21058// ListVirtualHubBgpConnectionResultsIterator provides access to a complete listing of BgpConnection
21059// values.
21060type ListVirtualHubBgpConnectionResultsIterator struct {
21061	i    int
21062	page ListVirtualHubBgpConnectionResultsPage
21063}
21064
21065// NextWithContext advances to the next value.  If there was an error making
21066// the request the iterator does not advance and the error is returned.
21067func (iter *ListVirtualHubBgpConnectionResultsIterator) NextWithContext(ctx context.Context) (err error) {
21068	if tracing.IsEnabled() {
21069		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubBgpConnectionResultsIterator.NextWithContext")
21070		defer func() {
21071			sc := -1
21072			if iter.Response().Response.Response != nil {
21073				sc = iter.Response().Response.Response.StatusCode
21074			}
21075			tracing.EndSpan(ctx, sc, err)
21076		}()
21077	}
21078	iter.i++
21079	if iter.i < len(iter.page.Values()) {
21080		return nil
21081	}
21082	err = iter.page.NextWithContext(ctx)
21083	if err != nil {
21084		iter.i--
21085		return err
21086	}
21087	iter.i = 0
21088	return nil
21089}
21090
21091// Next advances to the next value.  If there was an error making
21092// the request the iterator does not advance and the error is returned.
21093// Deprecated: Use NextWithContext() instead.
21094func (iter *ListVirtualHubBgpConnectionResultsIterator) Next() error {
21095	return iter.NextWithContext(context.Background())
21096}
21097
21098// NotDone returns true if the enumeration should be started or is not yet complete.
21099func (iter ListVirtualHubBgpConnectionResultsIterator) NotDone() bool {
21100	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21101}
21102
21103// Response returns the raw server response from the last page request.
21104func (iter ListVirtualHubBgpConnectionResultsIterator) Response() ListVirtualHubBgpConnectionResults {
21105	return iter.page.Response()
21106}
21107
21108// Value returns the current value or a zero-initialized value if the
21109// iterator has advanced beyond the end of the collection.
21110func (iter ListVirtualHubBgpConnectionResultsIterator) Value() BgpConnection {
21111	if !iter.page.NotDone() {
21112		return BgpConnection{}
21113	}
21114	return iter.page.Values()[iter.i]
21115}
21116
21117// Creates a new instance of the ListVirtualHubBgpConnectionResultsIterator type.
21118func NewListVirtualHubBgpConnectionResultsIterator(page ListVirtualHubBgpConnectionResultsPage) ListVirtualHubBgpConnectionResultsIterator {
21119	return ListVirtualHubBgpConnectionResultsIterator{page: page}
21120}
21121
21122// IsEmpty returns true if the ListResult contains no values.
21123func (lvhbcr ListVirtualHubBgpConnectionResults) IsEmpty() bool {
21124	return lvhbcr.Value == nil || len(*lvhbcr.Value) == 0
21125}
21126
21127// listVirtualHubBgpConnectionResultsPreparer prepares a request to retrieve the next set of results.
21128// It returns nil if no more results exist.
21129func (lvhbcr ListVirtualHubBgpConnectionResults) listVirtualHubBgpConnectionResultsPreparer(ctx context.Context) (*http.Request, error) {
21130	if lvhbcr.NextLink == nil || len(to.String(lvhbcr.NextLink)) < 1 {
21131		return nil, nil
21132	}
21133	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21134		autorest.AsJSON(),
21135		autorest.AsGet(),
21136		autorest.WithBaseURL(to.String(lvhbcr.NextLink)))
21137}
21138
21139// ListVirtualHubBgpConnectionResultsPage contains a page of BgpConnection values.
21140type ListVirtualHubBgpConnectionResultsPage struct {
21141	fn     func(context.Context, ListVirtualHubBgpConnectionResults) (ListVirtualHubBgpConnectionResults, error)
21142	lvhbcr ListVirtualHubBgpConnectionResults
21143}
21144
21145// NextWithContext advances to the next page of values.  If there was an error making
21146// the request the page does not advance and the error is returned.
21147func (page *ListVirtualHubBgpConnectionResultsPage) NextWithContext(ctx context.Context) (err error) {
21148	if tracing.IsEnabled() {
21149		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubBgpConnectionResultsPage.NextWithContext")
21150		defer func() {
21151			sc := -1
21152			if page.Response().Response.Response != nil {
21153				sc = page.Response().Response.Response.StatusCode
21154			}
21155			tracing.EndSpan(ctx, sc, err)
21156		}()
21157	}
21158	next, err := page.fn(ctx, page.lvhbcr)
21159	if err != nil {
21160		return err
21161	}
21162	page.lvhbcr = next
21163	return nil
21164}
21165
21166// Next advances to the next page of values.  If there was an error making
21167// the request the page does not advance and the error is returned.
21168// Deprecated: Use NextWithContext() instead.
21169func (page *ListVirtualHubBgpConnectionResultsPage) Next() error {
21170	return page.NextWithContext(context.Background())
21171}
21172
21173// NotDone returns true if the page enumeration should be started or is not yet complete.
21174func (page ListVirtualHubBgpConnectionResultsPage) NotDone() bool {
21175	return !page.lvhbcr.IsEmpty()
21176}
21177
21178// Response returns the raw server response from the last page request.
21179func (page ListVirtualHubBgpConnectionResultsPage) Response() ListVirtualHubBgpConnectionResults {
21180	return page.lvhbcr
21181}
21182
21183// Values returns the slice of values for the current page or nil if there are no values.
21184func (page ListVirtualHubBgpConnectionResultsPage) Values() []BgpConnection {
21185	if page.lvhbcr.IsEmpty() {
21186		return nil
21187	}
21188	return *page.lvhbcr.Value
21189}
21190
21191// Creates a new instance of the ListVirtualHubBgpConnectionResultsPage type.
21192func NewListVirtualHubBgpConnectionResultsPage(getNextPage func(context.Context, ListVirtualHubBgpConnectionResults) (ListVirtualHubBgpConnectionResults, error)) ListVirtualHubBgpConnectionResultsPage {
21193	return ListVirtualHubBgpConnectionResultsPage{fn: getNextPage}
21194}
21195
21196// ListVirtualHubIPConfigurationResults virtualHubIpConfigurations list.
21197type ListVirtualHubIPConfigurationResults struct {
21198	autorest.Response `json:"-"`
21199	// Value - The list of VirtualHubIpConfigurations.
21200	Value *[]HubIPConfiguration `json:"value,omitempty"`
21201	// NextLink - URL to get the next set of results.
21202	NextLink *string `json:"nextLink,omitempty"`
21203}
21204
21205// ListVirtualHubIPConfigurationResultsIterator provides access to a complete listing of HubIPConfiguration
21206// values.
21207type ListVirtualHubIPConfigurationResultsIterator struct {
21208	i    int
21209	page ListVirtualHubIPConfigurationResultsPage
21210}
21211
21212// NextWithContext advances to the next value.  If there was an error making
21213// the request the iterator does not advance and the error is returned.
21214func (iter *ListVirtualHubIPConfigurationResultsIterator) NextWithContext(ctx context.Context) (err error) {
21215	if tracing.IsEnabled() {
21216		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubIPConfigurationResultsIterator.NextWithContext")
21217		defer func() {
21218			sc := -1
21219			if iter.Response().Response.Response != nil {
21220				sc = iter.Response().Response.Response.StatusCode
21221			}
21222			tracing.EndSpan(ctx, sc, err)
21223		}()
21224	}
21225	iter.i++
21226	if iter.i < len(iter.page.Values()) {
21227		return nil
21228	}
21229	err = iter.page.NextWithContext(ctx)
21230	if err != nil {
21231		iter.i--
21232		return err
21233	}
21234	iter.i = 0
21235	return nil
21236}
21237
21238// Next advances to the next value.  If there was an error making
21239// the request the iterator does not advance and the error is returned.
21240// Deprecated: Use NextWithContext() instead.
21241func (iter *ListVirtualHubIPConfigurationResultsIterator) Next() error {
21242	return iter.NextWithContext(context.Background())
21243}
21244
21245// NotDone returns true if the enumeration should be started or is not yet complete.
21246func (iter ListVirtualHubIPConfigurationResultsIterator) NotDone() bool {
21247	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21248}
21249
21250// Response returns the raw server response from the last page request.
21251func (iter ListVirtualHubIPConfigurationResultsIterator) Response() ListVirtualHubIPConfigurationResults {
21252	return iter.page.Response()
21253}
21254
21255// Value returns the current value or a zero-initialized value if the
21256// iterator has advanced beyond the end of the collection.
21257func (iter ListVirtualHubIPConfigurationResultsIterator) Value() HubIPConfiguration {
21258	if !iter.page.NotDone() {
21259		return HubIPConfiguration{}
21260	}
21261	return iter.page.Values()[iter.i]
21262}
21263
21264// Creates a new instance of the ListVirtualHubIPConfigurationResultsIterator type.
21265func NewListVirtualHubIPConfigurationResultsIterator(page ListVirtualHubIPConfigurationResultsPage) ListVirtualHubIPConfigurationResultsIterator {
21266	return ListVirtualHubIPConfigurationResultsIterator{page: page}
21267}
21268
21269// IsEmpty returns true if the ListResult contains no values.
21270func (lvhicr ListVirtualHubIPConfigurationResults) IsEmpty() bool {
21271	return lvhicr.Value == nil || len(*lvhicr.Value) == 0
21272}
21273
21274// listVirtualHubIPConfigurationResultsPreparer prepares a request to retrieve the next set of results.
21275// It returns nil if no more results exist.
21276func (lvhicr ListVirtualHubIPConfigurationResults) listVirtualHubIPConfigurationResultsPreparer(ctx context.Context) (*http.Request, error) {
21277	if lvhicr.NextLink == nil || len(to.String(lvhicr.NextLink)) < 1 {
21278		return nil, nil
21279	}
21280	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21281		autorest.AsJSON(),
21282		autorest.AsGet(),
21283		autorest.WithBaseURL(to.String(lvhicr.NextLink)))
21284}
21285
21286// ListVirtualHubIPConfigurationResultsPage contains a page of HubIPConfiguration values.
21287type ListVirtualHubIPConfigurationResultsPage struct {
21288	fn     func(context.Context, ListVirtualHubIPConfigurationResults) (ListVirtualHubIPConfigurationResults, error)
21289	lvhicr ListVirtualHubIPConfigurationResults
21290}
21291
21292// NextWithContext advances to the next page of values.  If there was an error making
21293// the request the page does not advance and the error is returned.
21294func (page *ListVirtualHubIPConfigurationResultsPage) NextWithContext(ctx context.Context) (err error) {
21295	if tracing.IsEnabled() {
21296		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubIPConfigurationResultsPage.NextWithContext")
21297		defer func() {
21298			sc := -1
21299			if page.Response().Response.Response != nil {
21300				sc = page.Response().Response.Response.StatusCode
21301			}
21302			tracing.EndSpan(ctx, sc, err)
21303		}()
21304	}
21305	next, err := page.fn(ctx, page.lvhicr)
21306	if err != nil {
21307		return err
21308	}
21309	page.lvhicr = next
21310	return nil
21311}
21312
21313// Next advances to the next page of values.  If there was an error making
21314// the request the page does not advance and the error is returned.
21315// Deprecated: Use NextWithContext() instead.
21316func (page *ListVirtualHubIPConfigurationResultsPage) Next() error {
21317	return page.NextWithContext(context.Background())
21318}
21319
21320// NotDone returns true if the page enumeration should be started or is not yet complete.
21321func (page ListVirtualHubIPConfigurationResultsPage) NotDone() bool {
21322	return !page.lvhicr.IsEmpty()
21323}
21324
21325// Response returns the raw server response from the last page request.
21326func (page ListVirtualHubIPConfigurationResultsPage) Response() ListVirtualHubIPConfigurationResults {
21327	return page.lvhicr
21328}
21329
21330// Values returns the slice of values for the current page or nil if there are no values.
21331func (page ListVirtualHubIPConfigurationResultsPage) Values() []HubIPConfiguration {
21332	if page.lvhicr.IsEmpty() {
21333		return nil
21334	}
21335	return *page.lvhicr.Value
21336}
21337
21338// Creates a new instance of the ListVirtualHubIPConfigurationResultsPage type.
21339func NewListVirtualHubIPConfigurationResultsPage(getNextPage func(context.Context, ListVirtualHubIPConfigurationResults) (ListVirtualHubIPConfigurationResults, error)) ListVirtualHubIPConfigurationResultsPage {
21340	return ListVirtualHubIPConfigurationResultsPage{fn: getNextPage}
21341}
21342
21343// ListVirtualHubRouteTableV2sResult list of VirtualHubRouteTableV2s and a URL nextLink to get the next set
21344// of results.
21345type ListVirtualHubRouteTableV2sResult struct {
21346	autorest.Response `json:"-"`
21347	// Value - List of VirtualHubRouteTableV2s.
21348	Value *[]VirtualHubRouteTableV2 `json:"value,omitempty"`
21349	// NextLink - URL to get the next set of operation list results if there are any.
21350	NextLink *string `json:"nextLink,omitempty"`
21351}
21352
21353// ListVirtualHubRouteTableV2sResultIterator provides access to a complete listing of
21354// VirtualHubRouteTableV2 values.
21355type ListVirtualHubRouteTableV2sResultIterator struct {
21356	i    int
21357	page ListVirtualHubRouteTableV2sResultPage
21358}
21359
21360// NextWithContext advances to the next value.  If there was an error making
21361// the request the iterator does not advance and the error is returned.
21362func (iter *ListVirtualHubRouteTableV2sResultIterator) NextWithContext(ctx context.Context) (err error) {
21363	if tracing.IsEnabled() {
21364		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultIterator.NextWithContext")
21365		defer func() {
21366			sc := -1
21367			if iter.Response().Response.Response != nil {
21368				sc = iter.Response().Response.Response.StatusCode
21369			}
21370			tracing.EndSpan(ctx, sc, err)
21371		}()
21372	}
21373	iter.i++
21374	if iter.i < len(iter.page.Values()) {
21375		return nil
21376	}
21377	err = iter.page.NextWithContext(ctx)
21378	if err != nil {
21379		iter.i--
21380		return err
21381	}
21382	iter.i = 0
21383	return nil
21384}
21385
21386// Next advances to the next value.  If there was an error making
21387// the request the iterator does not advance and the error is returned.
21388// Deprecated: Use NextWithContext() instead.
21389func (iter *ListVirtualHubRouteTableV2sResultIterator) Next() error {
21390	return iter.NextWithContext(context.Background())
21391}
21392
21393// NotDone returns true if the enumeration should be started or is not yet complete.
21394func (iter ListVirtualHubRouteTableV2sResultIterator) NotDone() bool {
21395	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21396}
21397
21398// Response returns the raw server response from the last page request.
21399func (iter ListVirtualHubRouteTableV2sResultIterator) Response() ListVirtualHubRouteTableV2sResult {
21400	return iter.page.Response()
21401}
21402
21403// Value returns the current value or a zero-initialized value if the
21404// iterator has advanced beyond the end of the collection.
21405func (iter ListVirtualHubRouteTableV2sResultIterator) Value() VirtualHubRouteTableV2 {
21406	if !iter.page.NotDone() {
21407		return VirtualHubRouteTableV2{}
21408	}
21409	return iter.page.Values()[iter.i]
21410}
21411
21412// Creates a new instance of the ListVirtualHubRouteTableV2sResultIterator type.
21413func NewListVirtualHubRouteTableV2sResultIterator(page ListVirtualHubRouteTableV2sResultPage) ListVirtualHubRouteTableV2sResultIterator {
21414	return ListVirtualHubRouteTableV2sResultIterator{page: page}
21415}
21416
21417// IsEmpty returns true if the ListResult contains no values.
21418func (lvhrtvr ListVirtualHubRouteTableV2sResult) IsEmpty() bool {
21419	return lvhrtvr.Value == nil || len(*lvhrtvr.Value) == 0
21420}
21421
21422// listVirtualHubRouteTableV2sResultPreparer prepares a request to retrieve the next set of results.
21423// It returns nil if no more results exist.
21424func (lvhrtvr ListVirtualHubRouteTableV2sResult) listVirtualHubRouteTableV2sResultPreparer(ctx context.Context) (*http.Request, error) {
21425	if lvhrtvr.NextLink == nil || len(to.String(lvhrtvr.NextLink)) < 1 {
21426		return nil, nil
21427	}
21428	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21429		autorest.AsJSON(),
21430		autorest.AsGet(),
21431		autorest.WithBaseURL(to.String(lvhrtvr.NextLink)))
21432}
21433
21434// ListVirtualHubRouteTableV2sResultPage contains a page of VirtualHubRouteTableV2 values.
21435type ListVirtualHubRouteTableV2sResultPage struct {
21436	fn      func(context.Context, ListVirtualHubRouteTableV2sResult) (ListVirtualHubRouteTableV2sResult, error)
21437	lvhrtvr ListVirtualHubRouteTableV2sResult
21438}
21439
21440// NextWithContext advances to the next page of values.  If there was an error making
21441// the request the page does not advance and the error is returned.
21442func (page *ListVirtualHubRouteTableV2sResultPage) NextWithContext(ctx context.Context) (err error) {
21443	if tracing.IsEnabled() {
21444		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultPage.NextWithContext")
21445		defer func() {
21446			sc := -1
21447			if page.Response().Response.Response != nil {
21448				sc = page.Response().Response.Response.StatusCode
21449			}
21450			tracing.EndSpan(ctx, sc, err)
21451		}()
21452	}
21453	next, err := page.fn(ctx, page.lvhrtvr)
21454	if err != nil {
21455		return err
21456	}
21457	page.lvhrtvr = next
21458	return nil
21459}
21460
21461// Next advances to the next page of values.  If there was an error making
21462// the request the page does not advance and the error is returned.
21463// Deprecated: Use NextWithContext() instead.
21464func (page *ListVirtualHubRouteTableV2sResultPage) Next() error {
21465	return page.NextWithContext(context.Background())
21466}
21467
21468// NotDone returns true if the page enumeration should be started or is not yet complete.
21469func (page ListVirtualHubRouteTableV2sResultPage) NotDone() bool {
21470	return !page.lvhrtvr.IsEmpty()
21471}
21472
21473// Response returns the raw server response from the last page request.
21474func (page ListVirtualHubRouteTableV2sResultPage) Response() ListVirtualHubRouteTableV2sResult {
21475	return page.lvhrtvr
21476}
21477
21478// Values returns the slice of values for the current page or nil if there are no values.
21479func (page ListVirtualHubRouteTableV2sResultPage) Values() []VirtualHubRouteTableV2 {
21480	if page.lvhrtvr.IsEmpty() {
21481		return nil
21482	}
21483	return *page.lvhrtvr.Value
21484}
21485
21486// Creates a new instance of the ListVirtualHubRouteTableV2sResultPage type.
21487func NewListVirtualHubRouteTableV2sResultPage(getNextPage func(context.Context, ListVirtualHubRouteTableV2sResult) (ListVirtualHubRouteTableV2sResult, error)) ListVirtualHubRouteTableV2sResultPage {
21488	return ListVirtualHubRouteTableV2sResultPage{fn: getNextPage}
21489}
21490
21491// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
21492// URL nextLink to get the next set of results.
21493type ListVirtualHubsResult struct {
21494	autorest.Response `json:"-"`
21495	// Value - List of VirtualHubs.
21496	Value *[]VirtualHub `json:"value,omitempty"`
21497	// NextLink - URL to get the next set of operation list results if there are any.
21498	NextLink *string `json:"nextLink,omitempty"`
21499}
21500
21501// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
21502type ListVirtualHubsResultIterator struct {
21503	i    int
21504	page ListVirtualHubsResultPage
21505}
21506
21507// NextWithContext advances to the next value.  If there was an error making
21508// the request the iterator does not advance and the error is returned.
21509func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
21510	if tracing.IsEnabled() {
21511		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
21512		defer func() {
21513			sc := -1
21514			if iter.Response().Response.Response != nil {
21515				sc = iter.Response().Response.Response.StatusCode
21516			}
21517			tracing.EndSpan(ctx, sc, err)
21518		}()
21519	}
21520	iter.i++
21521	if iter.i < len(iter.page.Values()) {
21522		return nil
21523	}
21524	err = iter.page.NextWithContext(ctx)
21525	if err != nil {
21526		iter.i--
21527		return err
21528	}
21529	iter.i = 0
21530	return nil
21531}
21532
21533// Next advances to the next value.  If there was an error making
21534// the request the iterator does not advance and the error is returned.
21535// Deprecated: Use NextWithContext() instead.
21536func (iter *ListVirtualHubsResultIterator) Next() error {
21537	return iter.NextWithContext(context.Background())
21538}
21539
21540// NotDone returns true if the enumeration should be started or is not yet complete.
21541func (iter ListVirtualHubsResultIterator) NotDone() bool {
21542	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21543}
21544
21545// Response returns the raw server response from the last page request.
21546func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
21547	return iter.page.Response()
21548}
21549
21550// Value returns the current value or a zero-initialized value if the
21551// iterator has advanced beyond the end of the collection.
21552func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
21553	if !iter.page.NotDone() {
21554		return VirtualHub{}
21555	}
21556	return iter.page.Values()[iter.i]
21557}
21558
21559// Creates a new instance of the ListVirtualHubsResultIterator type.
21560func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
21561	return ListVirtualHubsResultIterator{page: page}
21562}
21563
21564// IsEmpty returns true if the ListResult contains no values.
21565func (lvhr ListVirtualHubsResult) IsEmpty() bool {
21566	return lvhr.Value == nil || len(*lvhr.Value) == 0
21567}
21568
21569// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
21570// It returns nil if no more results exist.
21571func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
21572	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
21573		return nil, nil
21574	}
21575	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21576		autorest.AsJSON(),
21577		autorest.AsGet(),
21578		autorest.WithBaseURL(to.String(lvhr.NextLink)))
21579}
21580
21581// ListVirtualHubsResultPage contains a page of VirtualHub values.
21582type ListVirtualHubsResultPage struct {
21583	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
21584	lvhr ListVirtualHubsResult
21585}
21586
21587// NextWithContext advances to the next page of values.  If there was an error making
21588// the request the page does not advance and the error is returned.
21589func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
21590	if tracing.IsEnabled() {
21591		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
21592		defer func() {
21593			sc := -1
21594			if page.Response().Response.Response != nil {
21595				sc = page.Response().Response.Response.StatusCode
21596			}
21597			tracing.EndSpan(ctx, sc, err)
21598		}()
21599	}
21600	next, err := page.fn(ctx, page.lvhr)
21601	if err != nil {
21602		return err
21603	}
21604	page.lvhr = next
21605	return nil
21606}
21607
21608// Next advances to the next page of values.  If there was an error making
21609// the request the page does not advance and the error is returned.
21610// Deprecated: Use NextWithContext() instead.
21611func (page *ListVirtualHubsResultPage) Next() error {
21612	return page.NextWithContext(context.Background())
21613}
21614
21615// NotDone returns true if the page enumeration should be started or is not yet complete.
21616func (page ListVirtualHubsResultPage) NotDone() bool {
21617	return !page.lvhr.IsEmpty()
21618}
21619
21620// Response returns the raw server response from the last page request.
21621func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
21622	return page.lvhr
21623}
21624
21625// Values returns the slice of values for the current page or nil if there are no values.
21626func (page ListVirtualHubsResultPage) Values() []VirtualHub {
21627	if page.lvhr.IsEmpty() {
21628		return nil
21629	}
21630	return *page.lvhr.Value
21631}
21632
21633// Creates a new instance of the ListVirtualHubsResultPage type.
21634func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
21635	return ListVirtualHubsResultPage{fn: getNextPage}
21636}
21637
21638// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
21639// URL nextLink to get the next set of results.
21640type ListVirtualWANsResult struct {
21641	autorest.Response `json:"-"`
21642	// Value - List of VirtualWANs.
21643	Value *[]VirtualWAN `json:"value,omitempty"`
21644	// NextLink - URL to get the next set of operation list results if there are any.
21645	NextLink *string `json:"nextLink,omitempty"`
21646}
21647
21648// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
21649type ListVirtualWANsResultIterator struct {
21650	i    int
21651	page ListVirtualWANsResultPage
21652}
21653
21654// NextWithContext advances to the next value.  If there was an error making
21655// the request the iterator does not advance and the error is returned.
21656func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
21657	if tracing.IsEnabled() {
21658		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
21659		defer func() {
21660			sc := -1
21661			if iter.Response().Response.Response != nil {
21662				sc = iter.Response().Response.Response.StatusCode
21663			}
21664			tracing.EndSpan(ctx, sc, err)
21665		}()
21666	}
21667	iter.i++
21668	if iter.i < len(iter.page.Values()) {
21669		return nil
21670	}
21671	err = iter.page.NextWithContext(ctx)
21672	if err != nil {
21673		iter.i--
21674		return err
21675	}
21676	iter.i = 0
21677	return nil
21678}
21679
21680// Next advances to the next value.  If there was an error making
21681// the request the iterator does not advance and the error is returned.
21682// Deprecated: Use NextWithContext() instead.
21683func (iter *ListVirtualWANsResultIterator) Next() error {
21684	return iter.NextWithContext(context.Background())
21685}
21686
21687// NotDone returns true if the enumeration should be started or is not yet complete.
21688func (iter ListVirtualWANsResultIterator) NotDone() bool {
21689	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21690}
21691
21692// Response returns the raw server response from the last page request.
21693func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
21694	return iter.page.Response()
21695}
21696
21697// Value returns the current value or a zero-initialized value if the
21698// iterator has advanced beyond the end of the collection.
21699func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
21700	if !iter.page.NotDone() {
21701		return VirtualWAN{}
21702	}
21703	return iter.page.Values()[iter.i]
21704}
21705
21706// Creates a new instance of the ListVirtualWANsResultIterator type.
21707func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
21708	return ListVirtualWANsResultIterator{page: page}
21709}
21710
21711// IsEmpty returns true if the ListResult contains no values.
21712func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
21713	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
21714}
21715
21716// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
21717// It returns nil if no more results exist.
21718func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
21719	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
21720		return nil, nil
21721	}
21722	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21723		autorest.AsJSON(),
21724		autorest.AsGet(),
21725		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
21726}
21727
21728// ListVirtualWANsResultPage contains a page of VirtualWAN values.
21729type ListVirtualWANsResultPage struct {
21730	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
21731	lvwnr ListVirtualWANsResult
21732}
21733
21734// NextWithContext advances to the next page of values.  If there was an error making
21735// the request the page does not advance and the error is returned.
21736func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
21737	if tracing.IsEnabled() {
21738		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
21739		defer func() {
21740			sc := -1
21741			if page.Response().Response.Response != nil {
21742				sc = page.Response().Response.Response.StatusCode
21743			}
21744			tracing.EndSpan(ctx, sc, err)
21745		}()
21746	}
21747	next, err := page.fn(ctx, page.lvwnr)
21748	if err != nil {
21749		return err
21750	}
21751	page.lvwnr = next
21752	return nil
21753}
21754
21755// Next advances to the next page of values.  If there was an error making
21756// the request the page does not advance and the error is returned.
21757// Deprecated: Use NextWithContext() instead.
21758func (page *ListVirtualWANsResultPage) Next() error {
21759	return page.NextWithContext(context.Background())
21760}
21761
21762// NotDone returns true if the page enumeration should be started or is not yet complete.
21763func (page ListVirtualWANsResultPage) NotDone() bool {
21764	return !page.lvwnr.IsEmpty()
21765}
21766
21767// Response returns the raw server response from the last page request.
21768func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
21769	return page.lvwnr
21770}
21771
21772// Values returns the slice of values for the current page or nil if there are no values.
21773func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
21774	if page.lvwnr.IsEmpty() {
21775		return nil
21776	}
21777	return *page.lvwnr.Value
21778}
21779
21780// Creates a new instance of the ListVirtualWANsResultPage type.
21781func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
21782	return ListVirtualWANsResultPage{fn: getNextPage}
21783}
21784
21785// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
21786// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
21787type ListVpnConnectionsResult struct {
21788	autorest.Response `json:"-"`
21789	// Value - List of Vpn Connections.
21790	Value *[]VpnConnection `json:"value,omitempty"`
21791	// NextLink - URL to get the next set of operation list results if there are any.
21792	NextLink *string `json:"nextLink,omitempty"`
21793}
21794
21795// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
21796type ListVpnConnectionsResultIterator struct {
21797	i    int
21798	page ListVpnConnectionsResultPage
21799}
21800
21801// NextWithContext advances to the next value.  If there was an error making
21802// the request the iterator does not advance and the error is returned.
21803func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
21804	if tracing.IsEnabled() {
21805		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
21806		defer func() {
21807			sc := -1
21808			if iter.Response().Response.Response != nil {
21809				sc = iter.Response().Response.Response.StatusCode
21810			}
21811			tracing.EndSpan(ctx, sc, err)
21812		}()
21813	}
21814	iter.i++
21815	if iter.i < len(iter.page.Values()) {
21816		return nil
21817	}
21818	err = iter.page.NextWithContext(ctx)
21819	if err != nil {
21820		iter.i--
21821		return err
21822	}
21823	iter.i = 0
21824	return nil
21825}
21826
21827// Next advances to the next value.  If there was an error making
21828// the request the iterator does not advance and the error is returned.
21829// Deprecated: Use NextWithContext() instead.
21830func (iter *ListVpnConnectionsResultIterator) Next() error {
21831	return iter.NextWithContext(context.Background())
21832}
21833
21834// NotDone returns true if the enumeration should be started or is not yet complete.
21835func (iter ListVpnConnectionsResultIterator) NotDone() bool {
21836	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21837}
21838
21839// Response returns the raw server response from the last page request.
21840func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
21841	return iter.page.Response()
21842}
21843
21844// Value returns the current value or a zero-initialized value if the
21845// iterator has advanced beyond the end of the collection.
21846func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
21847	if !iter.page.NotDone() {
21848		return VpnConnection{}
21849	}
21850	return iter.page.Values()[iter.i]
21851}
21852
21853// Creates a new instance of the ListVpnConnectionsResultIterator type.
21854func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
21855	return ListVpnConnectionsResultIterator{page: page}
21856}
21857
21858// IsEmpty returns true if the ListResult contains no values.
21859func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
21860	return lvcr.Value == nil || len(*lvcr.Value) == 0
21861}
21862
21863// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
21864// It returns nil if no more results exist.
21865func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
21866	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
21867		return nil, nil
21868	}
21869	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21870		autorest.AsJSON(),
21871		autorest.AsGet(),
21872		autorest.WithBaseURL(to.String(lvcr.NextLink)))
21873}
21874
21875// ListVpnConnectionsResultPage contains a page of VpnConnection values.
21876type ListVpnConnectionsResultPage struct {
21877	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
21878	lvcr ListVpnConnectionsResult
21879}
21880
21881// NextWithContext advances to the next page of values.  If there was an error making
21882// the request the page does not advance and the error is returned.
21883func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
21884	if tracing.IsEnabled() {
21885		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
21886		defer func() {
21887			sc := -1
21888			if page.Response().Response.Response != nil {
21889				sc = page.Response().Response.Response.StatusCode
21890			}
21891			tracing.EndSpan(ctx, sc, err)
21892		}()
21893	}
21894	next, err := page.fn(ctx, page.lvcr)
21895	if err != nil {
21896		return err
21897	}
21898	page.lvcr = next
21899	return nil
21900}
21901
21902// Next advances to the next page of values.  If there was an error making
21903// the request the page does not advance and the error is returned.
21904// Deprecated: Use NextWithContext() instead.
21905func (page *ListVpnConnectionsResultPage) Next() error {
21906	return page.NextWithContext(context.Background())
21907}
21908
21909// NotDone returns true if the page enumeration should be started or is not yet complete.
21910func (page ListVpnConnectionsResultPage) NotDone() bool {
21911	return !page.lvcr.IsEmpty()
21912}
21913
21914// Response returns the raw server response from the last page request.
21915func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
21916	return page.lvcr
21917}
21918
21919// Values returns the slice of values for the current page or nil if there are no values.
21920func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
21921	if page.lvcr.IsEmpty() {
21922		return nil
21923	}
21924	return *page.lvcr.Value
21925}
21926
21927// Creates a new instance of the ListVpnConnectionsResultPage type.
21928func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
21929	return ListVpnConnectionsResultPage{fn: getNextPage}
21930}
21931
21932// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
21933// URL nextLink to get the next set of results.
21934type ListVpnGatewaysResult struct {
21935	autorest.Response `json:"-"`
21936	// Value - List of VpnGateways.
21937	Value *[]VpnGateway `json:"value,omitempty"`
21938	// NextLink - URL to get the next set of operation list results if there are any.
21939	NextLink *string `json:"nextLink,omitempty"`
21940}
21941
21942// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
21943type ListVpnGatewaysResultIterator struct {
21944	i    int
21945	page ListVpnGatewaysResultPage
21946}
21947
21948// NextWithContext advances to the next value.  If there was an error making
21949// the request the iterator does not advance and the error is returned.
21950func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
21951	if tracing.IsEnabled() {
21952		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
21953		defer func() {
21954			sc := -1
21955			if iter.Response().Response.Response != nil {
21956				sc = iter.Response().Response.Response.StatusCode
21957			}
21958			tracing.EndSpan(ctx, sc, err)
21959		}()
21960	}
21961	iter.i++
21962	if iter.i < len(iter.page.Values()) {
21963		return nil
21964	}
21965	err = iter.page.NextWithContext(ctx)
21966	if err != nil {
21967		iter.i--
21968		return err
21969	}
21970	iter.i = 0
21971	return nil
21972}
21973
21974// Next advances to the next value.  If there was an error making
21975// the request the iterator does not advance and the error is returned.
21976// Deprecated: Use NextWithContext() instead.
21977func (iter *ListVpnGatewaysResultIterator) Next() error {
21978	return iter.NextWithContext(context.Background())
21979}
21980
21981// NotDone returns true if the enumeration should be started or is not yet complete.
21982func (iter ListVpnGatewaysResultIterator) NotDone() bool {
21983	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21984}
21985
21986// Response returns the raw server response from the last page request.
21987func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
21988	return iter.page.Response()
21989}
21990
21991// Value returns the current value or a zero-initialized value if the
21992// iterator has advanced beyond the end of the collection.
21993func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
21994	if !iter.page.NotDone() {
21995		return VpnGateway{}
21996	}
21997	return iter.page.Values()[iter.i]
21998}
21999
22000// Creates a new instance of the ListVpnGatewaysResultIterator type.
22001func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
22002	return ListVpnGatewaysResultIterator{page: page}
22003}
22004
22005// IsEmpty returns true if the ListResult contains no values.
22006func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
22007	return lvgr.Value == nil || len(*lvgr.Value) == 0
22008}
22009
22010// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
22011// It returns nil if no more results exist.
22012func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
22013	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
22014		return nil, nil
22015	}
22016	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22017		autorest.AsJSON(),
22018		autorest.AsGet(),
22019		autorest.WithBaseURL(to.String(lvgr.NextLink)))
22020}
22021
22022// ListVpnGatewaysResultPage contains a page of VpnGateway values.
22023type ListVpnGatewaysResultPage struct {
22024	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
22025	lvgr ListVpnGatewaysResult
22026}
22027
22028// NextWithContext advances to the next page of values.  If there was an error making
22029// the request the page does not advance and the error is returned.
22030func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
22031	if tracing.IsEnabled() {
22032		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
22033		defer func() {
22034			sc := -1
22035			if page.Response().Response.Response != nil {
22036				sc = page.Response().Response.Response.StatusCode
22037			}
22038			tracing.EndSpan(ctx, sc, err)
22039		}()
22040	}
22041	next, err := page.fn(ctx, page.lvgr)
22042	if err != nil {
22043		return err
22044	}
22045	page.lvgr = next
22046	return nil
22047}
22048
22049// Next advances to the next page of values.  If there was an error making
22050// the request the page does not advance and the error is returned.
22051// Deprecated: Use NextWithContext() instead.
22052func (page *ListVpnGatewaysResultPage) Next() error {
22053	return page.NextWithContext(context.Background())
22054}
22055
22056// NotDone returns true if the page enumeration should be started or is not yet complete.
22057func (page ListVpnGatewaysResultPage) NotDone() bool {
22058	return !page.lvgr.IsEmpty()
22059}
22060
22061// Response returns the raw server response from the last page request.
22062func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
22063	return page.lvgr
22064}
22065
22066// Values returns the slice of values for the current page or nil if there are no values.
22067func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
22068	if page.lvgr.IsEmpty() {
22069		return nil
22070	}
22071	return *page.lvgr.Value
22072}
22073
22074// Creates a new instance of the ListVpnGatewaysResultPage type.
22075func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
22076	return ListVpnGatewaysResultPage{fn: getNextPage}
22077}
22078
22079// ListVpnServerConfigurationsResult result of the request to list all VpnServerConfigurations. It contains
22080// a list of VpnServerConfigurations and a URL nextLink to get the next set of results.
22081type ListVpnServerConfigurationsResult struct {
22082	autorest.Response `json:"-"`
22083	// Value - List of VpnServerConfigurations.
22084	Value *[]VpnServerConfiguration `json:"value,omitempty"`
22085	// NextLink - URL to get the next set of operation list results if there are any.
22086	NextLink *string `json:"nextLink,omitempty"`
22087}
22088
22089// ListVpnServerConfigurationsResultIterator provides access to a complete listing of
22090// VpnServerConfiguration values.
22091type ListVpnServerConfigurationsResultIterator struct {
22092	i    int
22093	page ListVpnServerConfigurationsResultPage
22094}
22095
22096// NextWithContext advances to the next value.  If there was an error making
22097// the request the iterator does not advance and the error is returned.
22098func (iter *ListVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
22099	if tracing.IsEnabled() {
22100		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultIterator.NextWithContext")
22101		defer func() {
22102			sc := -1
22103			if iter.Response().Response.Response != nil {
22104				sc = iter.Response().Response.Response.StatusCode
22105			}
22106			tracing.EndSpan(ctx, sc, err)
22107		}()
22108	}
22109	iter.i++
22110	if iter.i < len(iter.page.Values()) {
22111		return nil
22112	}
22113	err = iter.page.NextWithContext(ctx)
22114	if err != nil {
22115		iter.i--
22116		return err
22117	}
22118	iter.i = 0
22119	return nil
22120}
22121
22122// Next advances to the next value.  If there was an error making
22123// the request the iterator does not advance and the error is returned.
22124// Deprecated: Use NextWithContext() instead.
22125func (iter *ListVpnServerConfigurationsResultIterator) Next() error {
22126	return iter.NextWithContext(context.Background())
22127}
22128
22129// NotDone returns true if the enumeration should be started or is not yet complete.
22130func (iter ListVpnServerConfigurationsResultIterator) NotDone() bool {
22131	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22132}
22133
22134// Response returns the raw server response from the last page request.
22135func (iter ListVpnServerConfigurationsResultIterator) Response() ListVpnServerConfigurationsResult {
22136	return iter.page.Response()
22137}
22138
22139// Value returns the current value or a zero-initialized value if the
22140// iterator has advanced beyond the end of the collection.
22141func (iter ListVpnServerConfigurationsResultIterator) Value() VpnServerConfiguration {
22142	if !iter.page.NotDone() {
22143		return VpnServerConfiguration{}
22144	}
22145	return iter.page.Values()[iter.i]
22146}
22147
22148// Creates a new instance of the ListVpnServerConfigurationsResultIterator type.
22149func NewListVpnServerConfigurationsResultIterator(page ListVpnServerConfigurationsResultPage) ListVpnServerConfigurationsResultIterator {
22150	return ListVpnServerConfigurationsResultIterator{page: page}
22151}
22152
22153// IsEmpty returns true if the ListResult contains no values.
22154func (lvscr ListVpnServerConfigurationsResult) IsEmpty() bool {
22155	return lvscr.Value == nil || len(*lvscr.Value) == 0
22156}
22157
22158// listVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
22159// It returns nil if no more results exist.
22160func (lvscr ListVpnServerConfigurationsResult) listVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
22161	if lvscr.NextLink == nil || len(to.String(lvscr.NextLink)) < 1 {
22162		return nil, nil
22163	}
22164	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22165		autorest.AsJSON(),
22166		autorest.AsGet(),
22167		autorest.WithBaseURL(to.String(lvscr.NextLink)))
22168}
22169
22170// ListVpnServerConfigurationsResultPage contains a page of VpnServerConfiguration values.
22171type ListVpnServerConfigurationsResultPage struct {
22172	fn    func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)
22173	lvscr ListVpnServerConfigurationsResult
22174}
22175
22176// NextWithContext advances to the next page of values.  If there was an error making
22177// the request the page does not advance and the error is returned.
22178func (page *ListVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
22179	if tracing.IsEnabled() {
22180		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultPage.NextWithContext")
22181		defer func() {
22182			sc := -1
22183			if page.Response().Response.Response != nil {
22184				sc = page.Response().Response.Response.StatusCode
22185			}
22186			tracing.EndSpan(ctx, sc, err)
22187		}()
22188	}
22189	next, err := page.fn(ctx, page.lvscr)
22190	if err != nil {
22191		return err
22192	}
22193	page.lvscr = next
22194	return nil
22195}
22196
22197// Next advances to the next page of values.  If there was an error making
22198// the request the page does not advance and the error is returned.
22199// Deprecated: Use NextWithContext() instead.
22200func (page *ListVpnServerConfigurationsResultPage) Next() error {
22201	return page.NextWithContext(context.Background())
22202}
22203
22204// NotDone returns true if the page enumeration should be started or is not yet complete.
22205func (page ListVpnServerConfigurationsResultPage) NotDone() bool {
22206	return !page.lvscr.IsEmpty()
22207}
22208
22209// Response returns the raw server response from the last page request.
22210func (page ListVpnServerConfigurationsResultPage) Response() ListVpnServerConfigurationsResult {
22211	return page.lvscr
22212}
22213
22214// Values returns the slice of values for the current page or nil if there are no values.
22215func (page ListVpnServerConfigurationsResultPage) Values() []VpnServerConfiguration {
22216	if page.lvscr.IsEmpty() {
22217		return nil
22218	}
22219	return *page.lvscr.Value
22220}
22221
22222// Creates a new instance of the ListVpnServerConfigurationsResultPage type.
22223func NewListVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)) ListVpnServerConfigurationsResultPage {
22224	return ListVpnServerConfigurationsResultPage{fn: getNextPage}
22225}
22226
22227// ListVpnSiteLinkConnectionsResult result of the request to list all vpn connections to a virtual wan vpn
22228// gateway. It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
22229type ListVpnSiteLinkConnectionsResult struct {
22230	autorest.Response `json:"-"`
22231	// Value - List of VpnSiteLinkConnections.
22232	Value *[]VpnSiteLinkConnection `json:"value,omitempty"`
22233	// NextLink - URL to get the next set of operation list results if there are any.
22234	NextLink *string `json:"nextLink,omitempty"`
22235}
22236
22237// ListVpnSiteLinkConnectionsResultIterator provides access to a complete listing of VpnSiteLinkConnection
22238// values.
22239type ListVpnSiteLinkConnectionsResultIterator struct {
22240	i    int
22241	page ListVpnSiteLinkConnectionsResultPage
22242}
22243
22244// NextWithContext advances to the next value.  If there was an error making
22245// the request the iterator does not advance and the error is returned.
22246func (iter *ListVpnSiteLinkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
22247	if tracing.IsEnabled() {
22248		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultIterator.NextWithContext")
22249		defer func() {
22250			sc := -1
22251			if iter.Response().Response.Response != nil {
22252				sc = iter.Response().Response.Response.StatusCode
22253			}
22254			tracing.EndSpan(ctx, sc, err)
22255		}()
22256	}
22257	iter.i++
22258	if iter.i < len(iter.page.Values()) {
22259		return nil
22260	}
22261	err = iter.page.NextWithContext(ctx)
22262	if err != nil {
22263		iter.i--
22264		return err
22265	}
22266	iter.i = 0
22267	return nil
22268}
22269
22270// Next advances to the next value.  If there was an error making
22271// the request the iterator does not advance and the error is returned.
22272// Deprecated: Use NextWithContext() instead.
22273func (iter *ListVpnSiteLinkConnectionsResultIterator) Next() error {
22274	return iter.NextWithContext(context.Background())
22275}
22276
22277// NotDone returns true if the enumeration should be started or is not yet complete.
22278func (iter ListVpnSiteLinkConnectionsResultIterator) NotDone() bool {
22279	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22280}
22281
22282// Response returns the raw server response from the last page request.
22283func (iter ListVpnSiteLinkConnectionsResultIterator) Response() ListVpnSiteLinkConnectionsResult {
22284	return iter.page.Response()
22285}
22286
22287// Value returns the current value or a zero-initialized value if the
22288// iterator has advanced beyond the end of the collection.
22289func (iter ListVpnSiteLinkConnectionsResultIterator) Value() VpnSiteLinkConnection {
22290	if !iter.page.NotDone() {
22291		return VpnSiteLinkConnection{}
22292	}
22293	return iter.page.Values()[iter.i]
22294}
22295
22296// Creates a new instance of the ListVpnSiteLinkConnectionsResultIterator type.
22297func NewListVpnSiteLinkConnectionsResultIterator(page ListVpnSiteLinkConnectionsResultPage) ListVpnSiteLinkConnectionsResultIterator {
22298	return ListVpnSiteLinkConnectionsResultIterator{page: page}
22299}
22300
22301// IsEmpty returns true if the ListResult contains no values.
22302func (lvslcr ListVpnSiteLinkConnectionsResult) IsEmpty() bool {
22303	return lvslcr.Value == nil || len(*lvslcr.Value) == 0
22304}
22305
22306// listVpnSiteLinkConnectionsResultPreparer prepares a request to retrieve the next set of results.
22307// It returns nil if no more results exist.
22308func (lvslcr ListVpnSiteLinkConnectionsResult) listVpnSiteLinkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
22309	if lvslcr.NextLink == nil || len(to.String(lvslcr.NextLink)) < 1 {
22310		return nil, nil
22311	}
22312	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22313		autorest.AsJSON(),
22314		autorest.AsGet(),
22315		autorest.WithBaseURL(to.String(lvslcr.NextLink)))
22316}
22317
22318// ListVpnSiteLinkConnectionsResultPage contains a page of VpnSiteLinkConnection values.
22319type ListVpnSiteLinkConnectionsResultPage struct {
22320	fn     func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)
22321	lvslcr ListVpnSiteLinkConnectionsResult
22322}
22323
22324// NextWithContext advances to the next page of values.  If there was an error making
22325// the request the page does not advance and the error is returned.
22326func (page *ListVpnSiteLinkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
22327	if tracing.IsEnabled() {
22328		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultPage.NextWithContext")
22329		defer func() {
22330			sc := -1
22331			if page.Response().Response.Response != nil {
22332				sc = page.Response().Response.Response.StatusCode
22333			}
22334			tracing.EndSpan(ctx, sc, err)
22335		}()
22336	}
22337	next, err := page.fn(ctx, page.lvslcr)
22338	if err != nil {
22339		return err
22340	}
22341	page.lvslcr = next
22342	return nil
22343}
22344
22345// Next advances to the next page of values.  If there was an error making
22346// the request the page does not advance and the error is returned.
22347// Deprecated: Use NextWithContext() instead.
22348func (page *ListVpnSiteLinkConnectionsResultPage) Next() error {
22349	return page.NextWithContext(context.Background())
22350}
22351
22352// NotDone returns true if the page enumeration should be started or is not yet complete.
22353func (page ListVpnSiteLinkConnectionsResultPage) NotDone() bool {
22354	return !page.lvslcr.IsEmpty()
22355}
22356
22357// Response returns the raw server response from the last page request.
22358func (page ListVpnSiteLinkConnectionsResultPage) Response() ListVpnSiteLinkConnectionsResult {
22359	return page.lvslcr
22360}
22361
22362// Values returns the slice of values for the current page or nil if there are no values.
22363func (page ListVpnSiteLinkConnectionsResultPage) Values() []VpnSiteLinkConnection {
22364	if page.lvslcr.IsEmpty() {
22365		return nil
22366	}
22367	return *page.lvslcr.Value
22368}
22369
22370// Creates a new instance of the ListVpnSiteLinkConnectionsResultPage type.
22371func NewListVpnSiteLinkConnectionsResultPage(getNextPage func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)) ListVpnSiteLinkConnectionsResultPage {
22372	return ListVpnSiteLinkConnectionsResultPage{fn: getNextPage}
22373}
22374
22375// ListVpnSiteLinksResult result of the request to list VpnSiteLinks. It contains a list of VpnSiteLinks
22376// and a URL nextLink to get the next set of results.
22377type ListVpnSiteLinksResult struct {
22378	autorest.Response `json:"-"`
22379	// Value - List of VpnSitesLinks.
22380	Value *[]VpnSiteLink `json:"value,omitempty"`
22381	// NextLink - URL to get the next set of operation list results if there are any.
22382	NextLink *string `json:"nextLink,omitempty"`
22383}
22384
22385// ListVpnSiteLinksResultIterator provides access to a complete listing of VpnSiteLink values.
22386type ListVpnSiteLinksResultIterator struct {
22387	i    int
22388	page ListVpnSiteLinksResultPage
22389}
22390
22391// NextWithContext advances to the next value.  If there was an error making
22392// the request the iterator does not advance and the error is returned.
22393func (iter *ListVpnSiteLinksResultIterator) NextWithContext(ctx context.Context) (err error) {
22394	if tracing.IsEnabled() {
22395		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultIterator.NextWithContext")
22396		defer func() {
22397			sc := -1
22398			if iter.Response().Response.Response != nil {
22399				sc = iter.Response().Response.Response.StatusCode
22400			}
22401			tracing.EndSpan(ctx, sc, err)
22402		}()
22403	}
22404	iter.i++
22405	if iter.i < len(iter.page.Values()) {
22406		return nil
22407	}
22408	err = iter.page.NextWithContext(ctx)
22409	if err != nil {
22410		iter.i--
22411		return err
22412	}
22413	iter.i = 0
22414	return nil
22415}
22416
22417// Next advances to the next value.  If there was an error making
22418// the request the iterator does not advance and the error is returned.
22419// Deprecated: Use NextWithContext() instead.
22420func (iter *ListVpnSiteLinksResultIterator) Next() error {
22421	return iter.NextWithContext(context.Background())
22422}
22423
22424// NotDone returns true if the enumeration should be started or is not yet complete.
22425func (iter ListVpnSiteLinksResultIterator) NotDone() bool {
22426	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22427}
22428
22429// Response returns the raw server response from the last page request.
22430func (iter ListVpnSiteLinksResultIterator) Response() ListVpnSiteLinksResult {
22431	return iter.page.Response()
22432}
22433
22434// Value returns the current value or a zero-initialized value if the
22435// iterator has advanced beyond the end of the collection.
22436func (iter ListVpnSiteLinksResultIterator) Value() VpnSiteLink {
22437	if !iter.page.NotDone() {
22438		return VpnSiteLink{}
22439	}
22440	return iter.page.Values()[iter.i]
22441}
22442
22443// Creates a new instance of the ListVpnSiteLinksResultIterator type.
22444func NewListVpnSiteLinksResultIterator(page ListVpnSiteLinksResultPage) ListVpnSiteLinksResultIterator {
22445	return ListVpnSiteLinksResultIterator{page: page}
22446}
22447
22448// IsEmpty returns true if the ListResult contains no values.
22449func (lvslr ListVpnSiteLinksResult) IsEmpty() bool {
22450	return lvslr.Value == nil || len(*lvslr.Value) == 0
22451}
22452
22453// listVpnSiteLinksResultPreparer prepares a request to retrieve the next set of results.
22454// It returns nil if no more results exist.
22455func (lvslr ListVpnSiteLinksResult) listVpnSiteLinksResultPreparer(ctx context.Context) (*http.Request, error) {
22456	if lvslr.NextLink == nil || len(to.String(lvslr.NextLink)) < 1 {
22457		return nil, nil
22458	}
22459	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22460		autorest.AsJSON(),
22461		autorest.AsGet(),
22462		autorest.WithBaseURL(to.String(lvslr.NextLink)))
22463}
22464
22465// ListVpnSiteLinksResultPage contains a page of VpnSiteLink values.
22466type ListVpnSiteLinksResultPage struct {
22467	fn    func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)
22468	lvslr ListVpnSiteLinksResult
22469}
22470
22471// NextWithContext advances to the next page of values.  If there was an error making
22472// the request the page does not advance and the error is returned.
22473func (page *ListVpnSiteLinksResultPage) NextWithContext(ctx context.Context) (err error) {
22474	if tracing.IsEnabled() {
22475		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultPage.NextWithContext")
22476		defer func() {
22477			sc := -1
22478			if page.Response().Response.Response != nil {
22479				sc = page.Response().Response.Response.StatusCode
22480			}
22481			tracing.EndSpan(ctx, sc, err)
22482		}()
22483	}
22484	next, err := page.fn(ctx, page.lvslr)
22485	if err != nil {
22486		return err
22487	}
22488	page.lvslr = next
22489	return nil
22490}
22491
22492// Next advances to the next page of values.  If there was an error making
22493// the request the page does not advance and the error is returned.
22494// Deprecated: Use NextWithContext() instead.
22495func (page *ListVpnSiteLinksResultPage) Next() error {
22496	return page.NextWithContext(context.Background())
22497}
22498
22499// NotDone returns true if the page enumeration should be started or is not yet complete.
22500func (page ListVpnSiteLinksResultPage) NotDone() bool {
22501	return !page.lvslr.IsEmpty()
22502}
22503
22504// Response returns the raw server response from the last page request.
22505func (page ListVpnSiteLinksResultPage) Response() ListVpnSiteLinksResult {
22506	return page.lvslr
22507}
22508
22509// Values returns the slice of values for the current page or nil if there are no values.
22510func (page ListVpnSiteLinksResultPage) Values() []VpnSiteLink {
22511	if page.lvslr.IsEmpty() {
22512		return nil
22513	}
22514	return *page.lvslr.Value
22515}
22516
22517// Creates a new instance of the ListVpnSiteLinksResultPage type.
22518func NewListVpnSiteLinksResultPage(getNextPage func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)) ListVpnSiteLinksResultPage {
22519	return ListVpnSiteLinksResultPage{fn: getNextPage}
22520}
22521
22522// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
22523// nextLink to get the next set of results.
22524type ListVpnSitesResult struct {
22525	autorest.Response `json:"-"`
22526	// Value - List of VpnSites.
22527	Value *[]VpnSite `json:"value,omitempty"`
22528	// NextLink - URL to get the next set of operation list results if there are any.
22529	NextLink *string `json:"nextLink,omitempty"`
22530}
22531
22532// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
22533type ListVpnSitesResultIterator struct {
22534	i    int
22535	page ListVpnSitesResultPage
22536}
22537
22538// NextWithContext advances to the next value.  If there was an error making
22539// the request the iterator does not advance and the error is returned.
22540func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
22541	if tracing.IsEnabled() {
22542		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
22543		defer func() {
22544			sc := -1
22545			if iter.Response().Response.Response != nil {
22546				sc = iter.Response().Response.Response.StatusCode
22547			}
22548			tracing.EndSpan(ctx, sc, err)
22549		}()
22550	}
22551	iter.i++
22552	if iter.i < len(iter.page.Values()) {
22553		return nil
22554	}
22555	err = iter.page.NextWithContext(ctx)
22556	if err != nil {
22557		iter.i--
22558		return err
22559	}
22560	iter.i = 0
22561	return nil
22562}
22563
22564// Next advances to the next value.  If there was an error making
22565// the request the iterator does not advance and the error is returned.
22566// Deprecated: Use NextWithContext() instead.
22567func (iter *ListVpnSitesResultIterator) Next() error {
22568	return iter.NextWithContext(context.Background())
22569}
22570
22571// NotDone returns true if the enumeration should be started or is not yet complete.
22572func (iter ListVpnSitesResultIterator) NotDone() bool {
22573	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22574}
22575
22576// Response returns the raw server response from the last page request.
22577func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
22578	return iter.page.Response()
22579}
22580
22581// Value returns the current value or a zero-initialized value if the
22582// iterator has advanced beyond the end of the collection.
22583func (iter ListVpnSitesResultIterator) Value() VpnSite {
22584	if !iter.page.NotDone() {
22585		return VpnSite{}
22586	}
22587	return iter.page.Values()[iter.i]
22588}
22589
22590// Creates a new instance of the ListVpnSitesResultIterator type.
22591func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
22592	return ListVpnSitesResultIterator{page: page}
22593}
22594
22595// IsEmpty returns true if the ListResult contains no values.
22596func (lvsr ListVpnSitesResult) IsEmpty() bool {
22597	return lvsr.Value == nil || len(*lvsr.Value) == 0
22598}
22599
22600// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
22601// It returns nil if no more results exist.
22602func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
22603	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
22604		return nil, nil
22605	}
22606	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22607		autorest.AsJSON(),
22608		autorest.AsGet(),
22609		autorest.WithBaseURL(to.String(lvsr.NextLink)))
22610}
22611
22612// ListVpnSitesResultPage contains a page of VpnSite values.
22613type ListVpnSitesResultPage struct {
22614	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
22615	lvsr ListVpnSitesResult
22616}
22617
22618// NextWithContext advances to the next page of values.  If there was an error making
22619// the request the page does not advance and the error is returned.
22620func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
22621	if tracing.IsEnabled() {
22622		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
22623		defer func() {
22624			sc := -1
22625			if page.Response().Response.Response != nil {
22626				sc = page.Response().Response.Response.StatusCode
22627			}
22628			tracing.EndSpan(ctx, sc, err)
22629		}()
22630	}
22631	next, err := page.fn(ctx, page.lvsr)
22632	if err != nil {
22633		return err
22634	}
22635	page.lvsr = next
22636	return nil
22637}
22638
22639// Next advances to the next page of values.  If there was an error making
22640// the request the page does not advance and the error is returned.
22641// Deprecated: Use NextWithContext() instead.
22642func (page *ListVpnSitesResultPage) Next() error {
22643	return page.NextWithContext(context.Background())
22644}
22645
22646// NotDone returns true if the page enumeration should be started or is not yet complete.
22647func (page ListVpnSitesResultPage) NotDone() bool {
22648	return !page.lvsr.IsEmpty()
22649}
22650
22651// Response returns the raw server response from the last page request.
22652func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
22653	return page.lvsr
22654}
22655
22656// Values returns the slice of values for the current page or nil if there are no values.
22657func (page ListVpnSitesResultPage) Values() []VpnSite {
22658	if page.lvsr.IsEmpty() {
22659		return nil
22660	}
22661	return *page.lvsr.Value
22662}
22663
22664// Creates a new instance of the ListVpnSitesResultPage type.
22665func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
22666	return ListVpnSitesResultPage{fn: getNextPage}
22667}
22668
22669// LoadBalancer loadBalancer resource.
22670type LoadBalancer struct {
22671	autorest.Response `json:"-"`
22672	// Sku - The load balancer SKU.
22673	Sku *LoadBalancerSku `json:"sku,omitempty"`
22674	// LoadBalancerPropertiesFormat - Properties of load balancer.
22675	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
22676	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22677	Etag *string `json:"etag,omitempty"`
22678	// ID - Resource ID.
22679	ID *string `json:"id,omitempty"`
22680	// Name - READ-ONLY; Resource name.
22681	Name *string `json:"name,omitempty"`
22682	// Type - READ-ONLY; Resource type.
22683	Type *string `json:"type,omitempty"`
22684	// Location - Resource location.
22685	Location *string `json:"location,omitempty"`
22686	// Tags - Resource tags.
22687	Tags map[string]*string `json:"tags"`
22688}
22689
22690// MarshalJSON is the custom marshaler for LoadBalancer.
22691func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
22692	objectMap := make(map[string]interface{})
22693	if lb.Sku != nil {
22694		objectMap["sku"] = lb.Sku
22695	}
22696	if lb.LoadBalancerPropertiesFormat != nil {
22697		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
22698	}
22699	if lb.ID != nil {
22700		objectMap["id"] = lb.ID
22701	}
22702	if lb.Location != nil {
22703		objectMap["location"] = lb.Location
22704	}
22705	if lb.Tags != nil {
22706		objectMap["tags"] = lb.Tags
22707	}
22708	return json.Marshal(objectMap)
22709}
22710
22711// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
22712func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
22713	var m map[string]*json.RawMessage
22714	err := json.Unmarshal(body, &m)
22715	if err != nil {
22716		return err
22717	}
22718	for k, v := range m {
22719		switch k {
22720		case "sku":
22721			if v != nil {
22722				var sku LoadBalancerSku
22723				err = json.Unmarshal(*v, &sku)
22724				if err != nil {
22725					return err
22726				}
22727				lb.Sku = &sku
22728			}
22729		case "properties":
22730			if v != nil {
22731				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
22732				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
22733				if err != nil {
22734					return err
22735				}
22736				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
22737			}
22738		case "etag":
22739			if v != nil {
22740				var etag string
22741				err = json.Unmarshal(*v, &etag)
22742				if err != nil {
22743					return err
22744				}
22745				lb.Etag = &etag
22746			}
22747		case "id":
22748			if v != nil {
22749				var ID string
22750				err = json.Unmarshal(*v, &ID)
22751				if err != nil {
22752					return err
22753				}
22754				lb.ID = &ID
22755			}
22756		case "name":
22757			if v != nil {
22758				var name string
22759				err = json.Unmarshal(*v, &name)
22760				if err != nil {
22761					return err
22762				}
22763				lb.Name = &name
22764			}
22765		case "type":
22766			if v != nil {
22767				var typeVar string
22768				err = json.Unmarshal(*v, &typeVar)
22769				if err != nil {
22770					return err
22771				}
22772				lb.Type = &typeVar
22773			}
22774		case "location":
22775			if v != nil {
22776				var location string
22777				err = json.Unmarshal(*v, &location)
22778				if err != nil {
22779					return err
22780				}
22781				lb.Location = &location
22782			}
22783		case "tags":
22784			if v != nil {
22785				var tags map[string]*string
22786				err = json.Unmarshal(*v, &tags)
22787				if err != nil {
22788					return err
22789				}
22790				lb.Tags = tags
22791			}
22792		}
22793	}
22794
22795	return nil
22796}
22797
22798// LoadBalancerBackendAddress load balancer backend addresses.
22799type LoadBalancerBackendAddress struct {
22800	// LoadBalancerBackendAddressPropertiesFormat - Properties of load balancer backend address pool.
22801	*LoadBalancerBackendAddressPropertiesFormat `json:"properties,omitempty"`
22802	// Name - Name of the backend address.
22803	Name *string `json:"name,omitempty"`
22804}
22805
22806// MarshalJSON is the custom marshaler for LoadBalancerBackendAddress.
22807func (lbba LoadBalancerBackendAddress) MarshalJSON() ([]byte, error) {
22808	objectMap := make(map[string]interface{})
22809	if lbba.LoadBalancerBackendAddressPropertiesFormat != nil {
22810		objectMap["properties"] = lbba.LoadBalancerBackendAddressPropertiesFormat
22811	}
22812	if lbba.Name != nil {
22813		objectMap["name"] = lbba.Name
22814	}
22815	return json.Marshal(objectMap)
22816}
22817
22818// UnmarshalJSON is the custom unmarshaler for LoadBalancerBackendAddress struct.
22819func (lbba *LoadBalancerBackendAddress) UnmarshalJSON(body []byte) error {
22820	var m map[string]*json.RawMessage
22821	err := json.Unmarshal(body, &m)
22822	if err != nil {
22823		return err
22824	}
22825	for k, v := range m {
22826		switch k {
22827		case "properties":
22828			if v != nil {
22829				var loadBalancerBackendAddressPropertiesFormat LoadBalancerBackendAddressPropertiesFormat
22830				err = json.Unmarshal(*v, &loadBalancerBackendAddressPropertiesFormat)
22831				if err != nil {
22832					return err
22833				}
22834				lbba.LoadBalancerBackendAddressPropertiesFormat = &loadBalancerBackendAddressPropertiesFormat
22835			}
22836		case "name":
22837			if v != nil {
22838				var name string
22839				err = json.Unmarshal(*v, &name)
22840				if err != nil {
22841					return err
22842				}
22843				lbba.Name = &name
22844			}
22845		}
22846	}
22847
22848	return nil
22849}
22850
22851// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
22852type LoadBalancerBackendAddressPoolListResult struct {
22853	autorest.Response `json:"-"`
22854	// Value - A list of backend address pools in a load balancer.
22855	Value *[]BackendAddressPool `json:"value,omitempty"`
22856	// NextLink - READ-ONLY; The URL to get the next set of results.
22857	NextLink *string `json:"nextLink,omitempty"`
22858}
22859
22860// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
22861// BackendAddressPool values.
22862type LoadBalancerBackendAddressPoolListResultIterator struct {
22863	i    int
22864	page LoadBalancerBackendAddressPoolListResultPage
22865}
22866
22867// NextWithContext advances to the next value.  If there was an error making
22868// the request the iterator does not advance and the error is returned.
22869func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
22870	if tracing.IsEnabled() {
22871		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
22872		defer func() {
22873			sc := -1
22874			if iter.Response().Response.Response != nil {
22875				sc = iter.Response().Response.Response.StatusCode
22876			}
22877			tracing.EndSpan(ctx, sc, err)
22878		}()
22879	}
22880	iter.i++
22881	if iter.i < len(iter.page.Values()) {
22882		return nil
22883	}
22884	err = iter.page.NextWithContext(ctx)
22885	if err != nil {
22886		iter.i--
22887		return err
22888	}
22889	iter.i = 0
22890	return nil
22891}
22892
22893// Next advances to the next value.  If there was an error making
22894// the request the iterator does not advance and the error is returned.
22895// Deprecated: Use NextWithContext() instead.
22896func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
22897	return iter.NextWithContext(context.Background())
22898}
22899
22900// NotDone returns true if the enumeration should be started or is not yet complete.
22901func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
22902	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22903}
22904
22905// Response returns the raw server response from the last page request.
22906func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
22907	return iter.page.Response()
22908}
22909
22910// Value returns the current value or a zero-initialized value if the
22911// iterator has advanced beyond the end of the collection.
22912func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
22913	if !iter.page.NotDone() {
22914		return BackendAddressPool{}
22915	}
22916	return iter.page.Values()[iter.i]
22917}
22918
22919// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
22920func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
22921	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
22922}
22923
22924// IsEmpty returns true if the ListResult contains no values.
22925func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
22926	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
22927}
22928
22929// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
22930// It returns nil if no more results exist.
22931func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
22932	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
22933		return nil, nil
22934	}
22935	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22936		autorest.AsJSON(),
22937		autorest.AsGet(),
22938		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
22939}
22940
22941// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
22942type LoadBalancerBackendAddressPoolListResultPage struct {
22943	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
22944	lbbaplr LoadBalancerBackendAddressPoolListResult
22945}
22946
22947// NextWithContext advances to the next page of values.  If there was an error making
22948// the request the page does not advance and the error is returned.
22949func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
22950	if tracing.IsEnabled() {
22951		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
22952		defer func() {
22953			sc := -1
22954			if page.Response().Response.Response != nil {
22955				sc = page.Response().Response.Response.StatusCode
22956			}
22957			tracing.EndSpan(ctx, sc, err)
22958		}()
22959	}
22960	next, err := page.fn(ctx, page.lbbaplr)
22961	if err != nil {
22962		return err
22963	}
22964	page.lbbaplr = next
22965	return nil
22966}
22967
22968// Next advances to the next page of values.  If there was an error making
22969// the request the page does not advance and the error is returned.
22970// Deprecated: Use NextWithContext() instead.
22971func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
22972	return page.NextWithContext(context.Background())
22973}
22974
22975// NotDone returns true if the page enumeration should be started or is not yet complete.
22976func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
22977	return !page.lbbaplr.IsEmpty()
22978}
22979
22980// Response returns the raw server response from the last page request.
22981func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
22982	return page.lbbaplr
22983}
22984
22985// Values returns the slice of values for the current page or nil if there are no values.
22986func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
22987	if page.lbbaplr.IsEmpty() {
22988		return nil
22989	}
22990	return *page.lbbaplr.Value
22991}
22992
22993// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
22994func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
22995	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
22996}
22997
22998// LoadBalancerBackendAddressPoolsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
22999// results of a long-running operation.
23000type LoadBalancerBackendAddressPoolsCreateOrUpdateFuture struct {
23001	azure.Future
23002}
23003
23004// Result returns the result of the asynchronous operation.
23005// If the operation has not completed it will return an error.
23006func (future *LoadBalancerBackendAddressPoolsCreateOrUpdateFuture) Result(client LoadBalancerBackendAddressPoolsClient) (bap BackendAddressPool, err error) {
23007	var done bool
23008	done, err = future.DoneWithContext(context.Background(), client)
23009	if err != nil {
23010		err = autorest.NewErrorWithError(err, "network.LoadBalancerBackendAddressPoolsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23011		return
23012	}
23013	if !done {
23014		err = azure.NewAsyncOpIncompleteError("network.LoadBalancerBackendAddressPoolsCreateOrUpdateFuture")
23015		return
23016	}
23017	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23018	if bap.Response.Response, err = future.GetResult(sender); err == nil && bap.Response.Response.StatusCode != http.StatusNoContent {
23019		bap, err = client.CreateOrUpdateResponder(bap.Response.Response)
23020		if err != nil {
23021			err = autorest.NewErrorWithError(err, "network.LoadBalancerBackendAddressPoolsCreateOrUpdateFuture", "Result", bap.Response.Response, "Failure responding to request")
23022		}
23023	}
23024	return
23025}
23026
23027// LoadBalancerBackendAddressPoolsDeleteFuture an abstraction for monitoring and retrieving the results of
23028// a long-running operation.
23029type LoadBalancerBackendAddressPoolsDeleteFuture struct {
23030	azure.Future
23031}
23032
23033// Result returns the result of the asynchronous operation.
23034// If the operation has not completed it will return an error.
23035func (future *LoadBalancerBackendAddressPoolsDeleteFuture) Result(client LoadBalancerBackendAddressPoolsClient) (ar autorest.Response, err error) {
23036	var done bool
23037	done, err = future.DoneWithContext(context.Background(), client)
23038	if err != nil {
23039		err = autorest.NewErrorWithError(err, "network.LoadBalancerBackendAddressPoolsDeleteFuture", "Result", future.Response(), "Polling failure")
23040		return
23041	}
23042	if !done {
23043		err = azure.NewAsyncOpIncompleteError("network.LoadBalancerBackendAddressPoolsDeleteFuture")
23044		return
23045	}
23046	ar.Response = future.Response()
23047	return
23048}
23049
23050// LoadBalancerBackendAddressPropertiesFormat properties of the load balancer backend addresses.
23051type LoadBalancerBackendAddressPropertiesFormat struct {
23052	// VirtualNetwork - Reference to an existing virtual network.
23053	VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"`
23054	// IPAddress - IP Address belonging to the referenced virtual network.
23055	IPAddress *string `json:"ipAddress,omitempty"`
23056	// NetworkInterfaceIPConfiguration - READ-ONLY; Reference to IP address defined in network interfaces.
23057	NetworkInterfaceIPConfiguration *SubResource `json:"networkInterfaceIPConfiguration,omitempty"`
23058}
23059
23060// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
23061type LoadBalancerFrontendIPConfigurationListResult struct {
23062	autorest.Response `json:"-"`
23063	// Value - A list of frontend IP configurations in a load balancer.
23064	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
23065	// NextLink - READ-ONLY; The URL to get the next set of results.
23066	NextLink *string `json:"nextLink,omitempty"`
23067}
23068
23069// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
23070// FrontendIPConfiguration values.
23071type LoadBalancerFrontendIPConfigurationListResultIterator struct {
23072	i    int
23073	page LoadBalancerFrontendIPConfigurationListResultPage
23074}
23075
23076// NextWithContext advances to the next value.  If there was an error making
23077// the request the iterator does not advance and the error is returned.
23078func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
23079	if tracing.IsEnabled() {
23080		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
23081		defer func() {
23082			sc := -1
23083			if iter.Response().Response.Response != nil {
23084				sc = iter.Response().Response.Response.StatusCode
23085			}
23086			tracing.EndSpan(ctx, sc, err)
23087		}()
23088	}
23089	iter.i++
23090	if iter.i < len(iter.page.Values()) {
23091		return nil
23092	}
23093	err = iter.page.NextWithContext(ctx)
23094	if err != nil {
23095		iter.i--
23096		return err
23097	}
23098	iter.i = 0
23099	return nil
23100}
23101
23102// Next advances to the next value.  If there was an error making
23103// the request the iterator does not advance and the error is returned.
23104// Deprecated: Use NextWithContext() instead.
23105func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
23106	return iter.NextWithContext(context.Background())
23107}
23108
23109// NotDone returns true if the enumeration should be started or is not yet complete.
23110func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
23111	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23112}
23113
23114// Response returns the raw server response from the last page request.
23115func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
23116	return iter.page.Response()
23117}
23118
23119// Value returns the current value or a zero-initialized value if the
23120// iterator has advanced beyond the end of the collection.
23121func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
23122	if !iter.page.NotDone() {
23123		return FrontendIPConfiguration{}
23124	}
23125	return iter.page.Values()[iter.i]
23126}
23127
23128// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
23129func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
23130	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
23131}
23132
23133// IsEmpty returns true if the ListResult contains no values.
23134func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
23135	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
23136}
23137
23138// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
23139// It returns nil if no more results exist.
23140func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
23141	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
23142		return nil, nil
23143	}
23144	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23145		autorest.AsJSON(),
23146		autorest.AsGet(),
23147		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
23148}
23149
23150// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
23151type LoadBalancerFrontendIPConfigurationListResultPage struct {
23152	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
23153	lbficlr LoadBalancerFrontendIPConfigurationListResult
23154}
23155
23156// NextWithContext advances to the next page of values.  If there was an error making
23157// the request the page does not advance and the error is returned.
23158func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
23159	if tracing.IsEnabled() {
23160		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
23161		defer func() {
23162			sc := -1
23163			if page.Response().Response.Response != nil {
23164				sc = page.Response().Response.Response.StatusCode
23165			}
23166			tracing.EndSpan(ctx, sc, err)
23167		}()
23168	}
23169	next, err := page.fn(ctx, page.lbficlr)
23170	if err != nil {
23171		return err
23172	}
23173	page.lbficlr = next
23174	return nil
23175}
23176
23177// Next advances to the next page of values.  If there was an error making
23178// the request the page does not advance and the error is returned.
23179// Deprecated: Use NextWithContext() instead.
23180func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
23181	return page.NextWithContext(context.Background())
23182}
23183
23184// NotDone returns true if the page enumeration should be started or is not yet complete.
23185func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
23186	return !page.lbficlr.IsEmpty()
23187}
23188
23189// Response returns the raw server response from the last page request.
23190func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
23191	return page.lbficlr
23192}
23193
23194// Values returns the slice of values for the current page or nil if there are no values.
23195func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
23196	if page.lbficlr.IsEmpty() {
23197		return nil
23198	}
23199	return *page.lbficlr.Value
23200}
23201
23202// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
23203func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
23204	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
23205}
23206
23207// LoadBalancerListResult response for ListLoadBalancers API service call.
23208type LoadBalancerListResult struct {
23209	autorest.Response `json:"-"`
23210	// Value - A list of load balancers in a resource group.
23211	Value *[]LoadBalancer `json:"value,omitempty"`
23212	// NextLink - READ-ONLY; The URL to get the next set of results.
23213	NextLink *string `json:"nextLink,omitempty"`
23214}
23215
23216// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
23217type LoadBalancerListResultIterator struct {
23218	i    int
23219	page LoadBalancerListResultPage
23220}
23221
23222// NextWithContext advances to the next value.  If there was an error making
23223// the request the iterator does not advance and the error is returned.
23224func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
23225	if tracing.IsEnabled() {
23226		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
23227		defer func() {
23228			sc := -1
23229			if iter.Response().Response.Response != nil {
23230				sc = iter.Response().Response.Response.StatusCode
23231			}
23232			tracing.EndSpan(ctx, sc, err)
23233		}()
23234	}
23235	iter.i++
23236	if iter.i < len(iter.page.Values()) {
23237		return nil
23238	}
23239	err = iter.page.NextWithContext(ctx)
23240	if err != nil {
23241		iter.i--
23242		return err
23243	}
23244	iter.i = 0
23245	return nil
23246}
23247
23248// Next advances to the next value.  If there was an error making
23249// the request the iterator does not advance and the error is returned.
23250// Deprecated: Use NextWithContext() instead.
23251func (iter *LoadBalancerListResultIterator) Next() error {
23252	return iter.NextWithContext(context.Background())
23253}
23254
23255// NotDone returns true if the enumeration should be started or is not yet complete.
23256func (iter LoadBalancerListResultIterator) NotDone() bool {
23257	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23258}
23259
23260// Response returns the raw server response from the last page request.
23261func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
23262	return iter.page.Response()
23263}
23264
23265// Value returns the current value or a zero-initialized value if the
23266// iterator has advanced beyond the end of the collection.
23267func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
23268	if !iter.page.NotDone() {
23269		return LoadBalancer{}
23270	}
23271	return iter.page.Values()[iter.i]
23272}
23273
23274// Creates a new instance of the LoadBalancerListResultIterator type.
23275func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
23276	return LoadBalancerListResultIterator{page: page}
23277}
23278
23279// IsEmpty returns true if the ListResult contains no values.
23280func (lblr LoadBalancerListResult) IsEmpty() bool {
23281	return lblr.Value == nil || len(*lblr.Value) == 0
23282}
23283
23284// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
23285// It returns nil if no more results exist.
23286func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
23287	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
23288		return nil, nil
23289	}
23290	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23291		autorest.AsJSON(),
23292		autorest.AsGet(),
23293		autorest.WithBaseURL(to.String(lblr.NextLink)))
23294}
23295
23296// LoadBalancerListResultPage contains a page of LoadBalancer values.
23297type LoadBalancerListResultPage struct {
23298	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
23299	lblr LoadBalancerListResult
23300}
23301
23302// NextWithContext advances to the next page of values.  If there was an error making
23303// the request the page does not advance and the error is returned.
23304func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
23305	if tracing.IsEnabled() {
23306		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
23307		defer func() {
23308			sc := -1
23309			if page.Response().Response.Response != nil {
23310				sc = page.Response().Response.Response.StatusCode
23311			}
23312			tracing.EndSpan(ctx, sc, err)
23313		}()
23314	}
23315	next, err := page.fn(ctx, page.lblr)
23316	if err != nil {
23317		return err
23318	}
23319	page.lblr = next
23320	return nil
23321}
23322
23323// Next advances to the next page of values.  If there was an error making
23324// the request the page does not advance and the error is returned.
23325// Deprecated: Use NextWithContext() instead.
23326func (page *LoadBalancerListResultPage) Next() error {
23327	return page.NextWithContext(context.Background())
23328}
23329
23330// NotDone returns true if the page enumeration should be started or is not yet complete.
23331func (page LoadBalancerListResultPage) NotDone() bool {
23332	return !page.lblr.IsEmpty()
23333}
23334
23335// Response returns the raw server response from the last page request.
23336func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
23337	return page.lblr
23338}
23339
23340// Values returns the slice of values for the current page or nil if there are no values.
23341func (page LoadBalancerListResultPage) Values() []LoadBalancer {
23342	if page.lblr.IsEmpty() {
23343		return nil
23344	}
23345	return *page.lblr.Value
23346}
23347
23348// Creates a new instance of the LoadBalancerListResultPage type.
23349func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
23350	return LoadBalancerListResultPage{fn: getNextPage}
23351}
23352
23353// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
23354type LoadBalancerLoadBalancingRuleListResult struct {
23355	autorest.Response `json:"-"`
23356	// Value - A list of load balancing rules in a load balancer.
23357	Value *[]LoadBalancingRule `json:"value,omitempty"`
23358	// NextLink - READ-ONLY; The URL to get the next set of results.
23359	NextLink *string `json:"nextLink,omitempty"`
23360}
23361
23362// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
23363// LoadBalancingRule values.
23364type LoadBalancerLoadBalancingRuleListResultIterator struct {
23365	i    int
23366	page LoadBalancerLoadBalancingRuleListResultPage
23367}
23368
23369// NextWithContext advances to the next value.  If there was an error making
23370// the request the iterator does not advance and the error is returned.
23371func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
23372	if tracing.IsEnabled() {
23373		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
23374		defer func() {
23375			sc := -1
23376			if iter.Response().Response.Response != nil {
23377				sc = iter.Response().Response.Response.StatusCode
23378			}
23379			tracing.EndSpan(ctx, sc, err)
23380		}()
23381	}
23382	iter.i++
23383	if iter.i < len(iter.page.Values()) {
23384		return nil
23385	}
23386	err = iter.page.NextWithContext(ctx)
23387	if err != nil {
23388		iter.i--
23389		return err
23390	}
23391	iter.i = 0
23392	return nil
23393}
23394
23395// Next advances to the next value.  If there was an error making
23396// the request the iterator does not advance and the error is returned.
23397// Deprecated: Use NextWithContext() instead.
23398func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
23399	return iter.NextWithContext(context.Background())
23400}
23401
23402// NotDone returns true if the enumeration should be started or is not yet complete.
23403func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
23404	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23405}
23406
23407// Response returns the raw server response from the last page request.
23408func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
23409	return iter.page.Response()
23410}
23411
23412// Value returns the current value or a zero-initialized value if the
23413// iterator has advanced beyond the end of the collection.
23414func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
23415	if !iter.page.NotDone() {
23416		return LoadBalancingRule{}
23417	}
23418	return iter.page.Values()[iter.i]
23419}
23420
23421// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
23422func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
23423	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
23424}
23425
23426// IsEmpty returns true if the ListResult contains no values.
23427func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
23428	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
23429}
23430
23431// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
23432// It returns nil if no more results exist.
23433func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
23434	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
23435		return nil, nil
23436	}
23437	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23438		autorest.AsJSON(),
23439		autorest.AsGet(),
23440		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
23441}
23442
23443// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
23444type LoadBalancerLoadBalancingRuleListResultPage struct {
23445	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
23446	lblbrlr LoadBalancerLoadBalancingRuleListResult
23447}
23448
23449// NextWithContext advances to the next page of values.  If there was an error making
23450// the request the page does not advance and the error is returned.
23451func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
23452	if tracing.IsEnabled() {
23453		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
23454		defer func() {
23455			sc := -1
23456			if page.Response().Response.Response != nil {
23457				sc = page.Response().Response.Response.StatusCode
23458			}
23459			tracing.EndSpan(ctx, sc, err)
23460		}()
23461	}
23462	next, err := page.fn(ctx, page.lblbrlr)
23463	if err != nil {
23464		return err
23465	}
23466	page.lblbrlr = next
23467	return nil
23468}
23469
23470// Next advances to the next page of values.  If there was an error making
23471// the request the page does not advance and the error is returned.
23472// Deprecated: Use NextWithContext() instead.
23473func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
23474	return page.NextWithContext(context.Background())
23475}
23476
23477// NotDone returns true if the page enumeration should be started or is not yet complete.
23478func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
23479	return !page.lblbrlr.IsEmpty()
23480}
23481
23482// Response returns the raw server response from the last page request.
23483func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
23484	return page.lblbrlr
23485}
23486
23487// Values returns the slice of values for the current page or nil if there are no values.
23488func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
23489	if page.lblbrlr.IsEmpty() {
23490		return nil
23491	}
23492	return *page.lblbrlr.Value
23493}
23494
23495// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
23496func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
23497	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
23498}
23499
23500// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
23501type LoadBalancerOutboundRuleListResult struct {
23502	autorest.Response `json:"-"`
23503	// Value - A list of outbound rules in a load balancer.
23504	Value *[]OutboundRule `json:"value,omitempty"`
23505	// NextLink - READ-ONLY; The URL to get the next set of results.
23506	NextLink *string `json:"nextLink,omitempty"`
23507}
23508
23509// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
23510type LoadBalancerOutboundRuleListResultIterator struct {
23511	i    int
23512	page LoadBalancerOutboundRuleListResultPage
23513}
23514
23515// NextWithContext advances to the next value.  If there was an error making
23516// the request the iterator does not advance and the error is returned.
23517func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
23518	if tracing.IsEnabled() {
23519		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
23520		defer func() {
23521			sc := -1
23522			if iter.Response().Response.Response != nil {
23523				sc = iter.Response().Response.Response.StatusCode
23524			}
23525			tracing.EndSpan(ctx, sc, err)
23526		}()
23527	}
23528	iter.i++
23529	if iter.i < len(iter.page.Values()) {
23530		return nil
23531	}
23532	err = iter.page.NextWithContext(ctx)
23533	if err != nil {
23534		iter.i--
23535		return err
23536	}
23537	iter.i = 0
23538	return nil
23539}
23540
23541// Next advances to the next value.  If there was an error making
23542// the request the iterator does not advance and the error is returned.
23543// Deprecated: Use NextWithContext() instead.
23544func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
23545	return iter.NextWithContext(context.Background())
23546}
23547
23548// NotDone returns true if the enumeration should be started or is not yet complete.
23549func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
23550	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23551}
23552
23553// Response returns the raw server response from the last page request.
23554func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
23555	return iter.page.Response()
23556}
23557
23558// Value returns the current value or a zero-initialized value if the
23559// iterator has advanced beyond the end of the collection.
23560func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
23561	if !iter.page.NotDone() {
23562		return OutboundRule{}
23563	}
23564	return iter.page.Values()[iter.i]
23565}
23566
23567// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
23568func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
23569	return LoadBalancerOutboundRuleListResultIterator{page: page}
23570}
23571
23572// IsEmpty returns true if the ListResult contains no values.
23573func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
23574	return lborlr.Value == nil || len(*lborlr.Value) == 0
23575}
23576
23577// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
23578// It returns nil if no more results exist.
23579func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
23580	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
23581		return nil, nil
23582	}
23583	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23584		autorest.AsJSON(),
23585		autorest.AsGet(),
23586		autorest.WithBaseURL(to.String(lborlr.NextLink)))
23587}
23588
23589// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
23590type LoadBalancerOutboundRuleListResultPage struct {
23591	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
23592	lborlr LoadBalancerOutboundRuleListResult
23593}
23594
23595// NextWithContext advances to the next page of values.  If there was an error making
23596// the request the page does not advance and the error is returned.
23597func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
23598	if tracing.IsEnabled() {
23599		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
23600		defer func() {
23601			sc := -1
23602			if page.Response().Response.Response != nil {
23603				sc = page.Response().Response.Response.StatusCode
23604			}
23605			tracing.EndSpan(ctx, sc, err)
23606		}()
23607	}
23608	next, err := page.fn(ctx, page.lborlr)
23609	if err != nil {
23610		return err
23611	}
23612	page.lborlr = next
23613	return nil
23614}
23615
23616// Next advances to the next page of values.  If there was an error making
23617// the request the page does not advance and the error is returned.
23618// Deprecated: Use NextWithContext() instead.
23619func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
23620	return page.NextWithContext(context.Background())
23621}
23622
23623// NotDone returns true if the page enumeration should be started or is not yet complete.
23624func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
23625	return !page.lborlr.IsEmpty()
23626}
23627
23628// Response returns the raw server response from the last page request.
23629func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
23630	return page.lborlr
23631}
23632
23633// Values returns the slice of values for the current page or nil if there are no values.
23634func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
23635	if page.lborlr.IsEmpty() {
23636		return nil
23637	}
23638	return *page.lborlr.Value
23639}
23640
23641// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
23642func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
23643	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
23644}
23645
23646// LoadBalancerProbeListResult response for ListProbe API service call.
23647type LoadBalancerProbeListResult struct {
23648	autorest.Response `json:"-"`
23649	// Value - A list of probes in a load balancer.
23650	Value *[]Probe `json:"value,omitempty"`
23651	// NextLink - READ-ONLY; The URL to get the next set of results.
23652	NextLink *string `json:"nextLink,omitempty"`
23653}
23654
23655// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
23656type LoadBalancerProbeListResultIterator struct {
23657	i    int
23658	page LoadBalancerProbeListResultPage
23659}
23660
23661// NextWithContext advances to the next value.  If there was an error making
23662// the request the iterator does not advance and the error is returned.
23663func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
23664	if tracing.IsEnabled() {
23665		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
23666		defer func() {
23667			sc := -1
23668			if iter.Response().Response.Response != nil {
23669				sc = iter.Response().Response.Response.StatusCode
23670			}
23671			tracing.EndSpan(ctx, sc, err)
23672		}()
23673	}
23674	iter.i++
23675	if iter.i < len(iter.page.Values()) {
23676		return nil
23677	}
23678	err = iter.page.NextWithContext(ctx)
23679	if err != nil {
23680		iter.i--
23681		return err
23682	}
23683	iter.i = 0
23684	return nil
23685}
23686
23687// Next advances to the next value.  If there was an error making
23688// the request the iterator does not advance and the error is returned.
23689// Deprecated: Use NextWithContext() instead.
23690func (iter *LoadBalancerProbeListResultIterator) Next() error {
23691	return iter.NextWithContext(context.Background())
23692}
23693
23694// NotDone returns true if the enumeration should be started or is not yet complete.
23695func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
23696	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23697}
23698
23699// Response returns the raw server response from the last page request.
23700func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
23701	return iter.page.Response()
23702}
23703
23704// Value returns the current value or a zero-initialized value if the
23705// iterator has advanced beyond the end of the collection.
23706func (iter LoadBalancerProbeListResultIterator) Value() Probe {
23707	if !iter.page.NotDone() {
23708		return Probe{}
23709	}
23710	return iter.page.Values()[iter.i]
23711}
23712
23713// Creates a new instance of the LoadBalancerProbeListResultIterator type.
23714func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
23715	return LoadBalancerProbeListResultIterator{page: page}
23716}
23717
23718// IsEmpty returns true if the ListResult contains no values.
23719func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
23720	return lbplr.Value == nil || len(*lbplr.Value) == 0
23721}
23722
23723// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
23724// It returns nil if no more results exist.
23725func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
23726	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
23727		return nil, nil
23728	}
23729	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23730		autorest.AsJSON(),
23731		autorest.AsGet(),
23732		autorest.WithBaseURL(to.String(lbplr.NextLink)))
23733}
23734
23735// LoadBalancerProbeListResultPage contains a page of Probe values.
23736type LoadBalancerProbeListResultPage struct {
23737	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
23738	lbplr LoadBalancerProbeListResult
23739}
23740
23741// NextWithContext advances to the next page of values.  If there was an error making
23742// the request the page does not advance and the error is returned.
23743func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
23744	if tracing.IsEnabled() {
23745		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
23746		defer func() {
23747			sc := -1
23748			if page.Response().Response.Response != nil {
23749				sc = page.Response().Response.Response.StatusCode
23750			}
23751			tracing.EndSpan(ctx, sc, err)
23752		}()
23753	}
23754	next, err := page.fn(ctx, page.lbplr)
23755	if err != nil {
23756		return err
23757	}
23758	page.lbplr = next
23759	return nil
23760}
23761
23762// Next advances to the next page of values.  If there was an error making
23763// the request the page does not advance and the error is returned.
23764// Deprecated: Use NextWithContext() instead.
23765func (page *LoadBalancerProbeListResultPage) Next() error {
23766	return page.NextWithContext(context.Background())
23767}
23768
23769// NotDone returns true if the page enumeration should be started or is not yet complete.
23770func (page LoadBalancerProbeListResultPage) NotDone() bool {
23771	return !page.lbplr.IsEmpty()
23772}
23773
23774// Response returns the raw server response from the last page request.
23775func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
23776	return page.lbplr
23777}
23778
23779// Values returns the slice of values for the current page or nil if there are no values.
23780func (page LoadBalancerProbeListResultPage) Values() []Probe {
23781	if page.lbplr.IsEmpty() {
23782		return nil
23783	}
23784	return *page.lbplr.Value
23785}
23786
23787// Creates a new instance of the LoadBalancerProbeListResultPage type.
23788func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
23789	return LoadBalancerProbeListResultPage{fn: getNextPage}
23790}
23791
23792// LoadBalancerPropertiesFormat properties of the load balancer.
23793type LoadBalancerPropertiesFormat struct {
23794	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer.
23795	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
23796	// BackendAddressPools - Collection of backend address pools used by a load balancer.
23797	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
23798	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning.
23799	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
23800	// Probes - Collection of probe objects used in the load balancer.
23801	Probes *[]Probe `json:"probes,omitempty"`
23802	// InboundNatRules - Collection of inbound NAT Rules used by a load balancer. Defining inbound NAT rules on your load balancer is mutually exclusive with defining an inbound NAT pool. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an Inbound NAT pool. They have to reference individual inbound NAT rules.
23803	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
23804	// InboundNatPools - Defines an external port range for inbound NAT to a single backend port on NICs associated with a load balancer. Inbound NAT rules are created automatically for each NIC associated with the Load Balancer using an external port from this range. Defining an Inbound NAT pool on your Load Balancer is mutually exclusive with defining inbound Nat rules. Inbound NAT pools are referenced from virtual machine scale sets. NICs that are associated with individual virtual machines cannot reference an inbound NAT pool. They have to reference individual inbound NAT rules.
23805	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
23806	// OutboundRules - The outbound rules.
23807	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
23808	// ResourceGUID - READ-ONLY; The resource GUID property of the load balancer resource.
23809	ResourceGUID *string `json:"resourceGuid,omitempty"`
23810	// ProvisioningState - READ-ONLY; The provisioning state of the load balancer resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23811	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23812}
23813
23814// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23815// long-running operation.
23816type LoadBalancersCreateOrUpdateFuture struct {
23817	azure.Future
23818}
23819
23820// Result returns the result of the asynchronous operation.
23821// If the operation has not completed it will return an error.
23822func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
23823	var done bool
23824	done, err = future.DoneWithContext(context.Background(), client)
23825	if err != nil {
23826		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23827		return
23828	}
23829	if !done {
23830		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
23831		return
23832	}
23833	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23834	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
23835		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
23836		if err != nil {
23837			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
23838		}
23839	}
23840	return
23841}
23842
23843// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23844// operation.
23845type LoadBalancersDeleteFuture struct {
23846	azure.Future
23847}
23848
23849// Result returns the result of the asynchronous operation.
23850// If the operation has not completed it will return an error.
23851func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
23852	var done bool
23853	done, err = future.DoneWithContext(context.Background(), client)
23854	if err != nil {
23855		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
23856		return
23857	}
23858	if !done {
23859		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
23860		return
23861	}
23862	ar.Response = future.Response()
23863	return
23864}
23865
23866// LoadBalancerSku SKU of a load balancer.
23867type LoadBalancerSku struct {
23868	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
23869	Name LoadBalancerSkuName `json:"name,omitempty"`
23870}
23871
23872// LoadBalancingRule a load balancing rule for a load balancer.
23873type LoadBalancingRule struct {
23874	autorest.Response `json:"-"`
23875	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
23876	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
23877	// Name - The name of the resource that is unique within the set of load balancing rules used by the load balancer. This name can be used to access the resource.
23878	Name *string `json:"name,omitempty"`
23879	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23880	Etag *string `json:"etag,omitempty"`
23881	// Type - READ-ONLY; Type of the resource.
23882	Type *string `json:"type,omitempty"`
23883	// ID - Resource ID.
23884	ID *string `json:"id,omitempty"`
23885}
23886
23887// MarshalJSON is the custom marshaler for LoadBalancingRule.
23888func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
23889	objectMap := make(map[string]interface{})
23890	if lbr.LoadBalancingRulePropertiesFormat != nil {
23891		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
23892	}
23893	if lbr.Name != nil {
23894		objectMap["name"] = lbr.Name
23895	}
23896	if lbr.ID != nil {
23897		objectMap["id"] = lbr.ID
23898	}
23899	return json.Marshal(objectMap)
23900}
23901
23902// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
23903func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
23904	var m map[string]*json.RawMessage
23905	err := json.Unmarshal(body, &m)
23906	if err != nil {
23907		return err
23908	}
23909	for k, v := range m {
23910		switch k {
23911		case "properties":
23912			if v != nil {
23913				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
23914				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
23915				if err != nil {
23916					return err
23917				}
23918				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
23919			}
23920		case "name":
23921			if v != nil {
23922				var name string
23923				err = json.Unmarshal(*v, &name)
23924				if err != nil {
23925					return err
23926				}
23927				lbr.Name = &name
23928			}
23929		case "etag":
23930			if v != nil {
23931				var etag string
23932				err = json.Unmarshal(*v, &etag)
23933				if err != nil {
23934					return err
23935				}
23936				lbr.Etag = &etag
23937			}
23938		case "type":
23939			if v != nil {
23940				var typeVar string
23941				err = json.Unmarshal(*v, &typeVar)
23942				if err != nil {
23943					return err
23944				}
23945				lbr.Type = &typeVar
23946			}
23947		case "id":
23948			if v != nil {
23949				var ID string
23950				err = json.Unmarshal(*v, &ID)
23951				if err != nil {
23952					return err
23953				}
23954				lbr.ID = &ID
23955			}
23956		}
23957	}
23958
23959	return nil
23960}
23961
23962// LoadBalancingRulePropertiesFormat properties of the load balancer.
23963type LoadBalancingRulePropertiesFormat struct {
23964	// FrontendIPConfiguration - A reference to frontend IP addresses.
23965	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
23966	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
23967	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
23968	// Probe - The reference to the load balancer probe used by the load balancing rule.
23969	Probe *SubResource `json:"probe,omitempty"`
23970	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
23971	Protocol TransportProtocol `json:"protocol,omitempty"`
23972	// LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
23973	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
23974	// FrontendPort - The port for the external endpoint. Port numbers for each rule must be unique within the Load Balancer. Acceptable values are between 0 and 65534. Note that value 0 enables "Any Port".
23975	FrontendPort *int32 `json:"frontendPort,omitempty"`
23976	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port".
23977	BackendPort *int32 `json:"backendPort,omitempty"`
23978	// IdleTimeoutInMinutes - The timeout for the TCP idle connection. The value can be set between 4 and 30 minutes. The default value is 4 minutes. This element is only used when the protocol is set to TCP.
23979	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
23980	// EnableFloatingIP - Configures a virtual machine's endpoint for the floating IP capability required to configure a SQL AlwaysOn Availability Group. This setting is required when using the SQL AlwaysOn Availability Groups in SQL server. This setting can't be changed after you create the endpoint.
23981	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
23982	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
23983	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
23984	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
23985	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
23986	// ProvisioningState - READ-ONLY; The provisioning state of the load balancing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23987	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23988}
23989
23990// LocalNetworkGateway a common class for general resource information.
23991type LocalNetworkGateway struct {
23992	autorest.Response `json:"-"`
23993	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
23994	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
23995	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23996	Etag *string `json:"etag,omitempty"`
23997	// ID - Resource ID.
23998	ID *string `json:"id,omitempty"`
23999	// Name - READ-ONLY; Resource name.
24000	Name *string `json:"name,omitempty"`
24001	// Type - READ-ONLY; Resource type.
24002	Type *string `json:"type,omitempty"`
24003	// Location - Resource location.
24004	Location *string `json:"location,omitempty"`
24005	// Tags - Resource tags.
24006	Tags map[string]*string `json:"tags"`
24007}
24008
24009// MarshalJSON is the custom marshaler for LocalNetworkGateway.
24010func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
24011	objectMap := make(map[string]interface{})
24012	if lng.LocalNetworkGatewayPropertiesFormat != nil {
24013		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
24014	}
24015	if lng.ID != nil {
24016		objectMap["id"] = lng.ID
24017	}
24018	if lng.Location != nil {
24019		objectMap["location"] = lng.Location
24020	}
24021	if lng.Tags != nil {
24022		objectMap["tags"] = lng.Tags
24023	}
24024	return json.Marshal(objectMap)
24025}
24026
24027// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
24028func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
24029	var m map[string]*json.RawMessage
24030	err := json.Unmarshal(body, &m)
24031	if err != nil {
24032		return err
24033	}
24034	for k, v := range m {
24035		switch k {
24036		case "properties":
24037			if v != nil {
24038				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
24039				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
24040				if err != nil {
24041					return err
24042				}
24043				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
24044			}
24045		case "etag":
24046			if v != nil {
24047				var etag string
24048				err = json.Unmarshal(*v, &etag)
24049				if err != nil {
24050					return err
24051				}
24052				lng.Etag = &etag
24053			}
24054		case "id":
24055			if v != nil {
24056				var ID string
24057				err = json.Unmarshal(*v, &ID)
24058				if err != nil {
24059					return err
24060				}
24061				lng.ID = &ID
24062			}
24063		case "name":
24064			if v != nil {
24065				var name string
24066				err = json.Unmarshal(*v, &name)
24067				if err != nil {
24068					return err
24069				}
24070				lng.Name = &name
24071			}
24072		case "type":
24073			if v != nil {
24074				var typeVar string
24075				err = json.Unmarshal(*v, &typeVar)
24076				if err != nil {
24077					return err
24078				}
24079				lng.Type = &typeVar
24080			}
24081		case "location":
24082			if v != nil {
24083				var location string
24084				err = json.Unmarshal(*v, &location)
24085				if err != nil {
24086					return err
24087				}
24088				lng.Location = &location
24089			}
24090		case "tags":
24091			if v != nil {
24092				var tags map[string]*string
24093				err = json.Unmarshal(*v, &tags)
24094				if err != nil {
24095					return err
24096				}
24097				lng.Tags = tags
24098			}
24099		}
24100	}
24101
24102	return nil
24103}
24104
24105// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
24106type LocalNetworkGatewayListResult struct {
24107	autorest.Response `json:"-"`
24108	// Value - A list of local network gateways that exists in a resource group.
24109	Value *[]LocalNetworkGateway `json:"value,omitempty"`
24110	// NextLink - READ-ONLY; The URL to get the next set of results.
24111	NextLink *string `json:"nextLink,omitempty"`
24112}
24113
24114// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
24115// values.
24116type LocalNetworkGatewayListResultIterator struct {
24117	i    int
24118	page LocalNetworkGatewayListResultPage
24119}
24120
24121// NextWithContext advances to the next value.  If there was an error making
24122// the request the iterator does not advance and the error is returned.
24123func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
24124	if tracing.IsEnabled() {
24125		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
24126		defer func() {
24127			sc := -1
24128			if iter.Response().Response.Response != nil {
24129				sc = iter.Response().Response.Response.StatusCode
24130			}
24131			tracing.EndSpan(ctx, sc, err)
24132		}()
24133	}
24134	iter.i++
24135	if iter.i < len(iter.page.Values()) {
24136		return nil
24137	}
24138	err = iter.page.NextWithContext(ctx)
24139	if err != nil {
24140		iter.i--
24141		return err
24142	}
24143	iter.i = 0
24144	return nil
24145}
24146
24147// Next advances to the next value.  If there was an error making
24148// the request the iterator does not advance and the error is returned.
24149// Deprecated: Use NextWithContext() instead.
24150func (iter *LocalNetworkGatewayListResultIterator) Next() error {
24151	return iter.NextWithContext(context.Background())
24152}
24153
24154// NotDone returns true if the enumeration should be started or is not yet complete.
24155func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
24156	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24157}
24158
24159// Response returns the raw server response from the last page request.
24160func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
24161	return iter.page.Response()
24162}
24163
24164// Value returns the current value or a zero-initialized value if the
24165// iterator has advanced beyond the end of the collection.
24166func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
24167	if !iter.page.NotDone() {
24168		return LocalNetworkGateway{}
24169	}
24170	return iter.page.Values()[iter.i]
24171}
24172
24173// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
24174func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
24175	return LocalNetworkGatewayListResultIterator{page: page}
24176}
24177
24178// IsEmpty returns true if the ListResult contains no values.
24179func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
24180	return lnglr.Value == nil || len(*lnglr.Value) == 0
24181}
24182
24183// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
24184// It returns nil if no more results exist.
24185func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
24186	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
24187		return nil, nil
24188	}
24189	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24190		autorest.AsJSON(),
24191		autorest.AsGet(),
24192		autorest.WithBaseURL(to.String(lnglr.NextLink)))
24193}
24194
24195// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
24196type LocalNetworkGatewayListResultPage struct {
24197	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
24198	lnglr LocalNetworkGatewayListResult
24199}
24200
24201// NextWithContext advances to the next page of values.  If there was an error making
24202// the request the page does not advance and the error is returned.
24203func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
24204	if tracing.IsEnabled() {
24205		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
24206		defer func() {
24207			sc := -1
24208			if page.Response().Response.Response != nil {
24209				sc = page.Response().Response.Response.StatusCode
24210			}
24211			tracing.EndSpan(ctx, sc, err)
24212		}()
24213	}
24214	next, err := page.fn(ctx, page.lnglr)
24215	if err != nil {
24216		return err
24217	}
24218	page.lnglr = next
24219	return nil
24220}
24221
24222// Next advances to the next page of values.  If there was an error making
24223// the request the page does not advance and the error is returned.
24224// Deprecated: Use NextWithContext() instead.
24225func (page *LocalNetworkGatewayListResultPage) Next() error {
24226	return page.NextWithContext(context.Background())
24227}
24228
24229// NotDone returns true if the page enumeration should be started or is not yet complete.
24230func (page LocalNetworkGatewayListResultPage) NotDone() bool {
24231	return !page.lnglr.IsEmpty()
24232}
24233
24234// Response returns the raw server response from the last page request.
24235func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
24236	return page.lnglr
24237}
24238
24239// Values returns the slice of values for the current page or nil if there are no values.
24240func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
24241	if page.lnglr.IsEmpty() {
24242		return nil
24243	}
24244	return *page.lnglr.Value
24245}
24246
24247// Creates a new instance of the LocalNetworkGatewayListResultPage type.
24248func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
24249	return LocalNetworkGatewayListResultPage{fn: getNextPage}
24250}
24251
24252// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties.
24253type LocalNetworkGatewayPropertiesFormat struct {
24254	// LocalNetworkAddressSpace - Local network site address space.
24255	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
24256	// GatewayIPAddress - IP address of local network gateway.
24257	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
24258	// Fqdn - FQDN of local network gateway.
24259	Fqdn *string `json:"fqdn,omitempty"`
24260	// BgpSettings - Local network gateway's BGP speaker settings.
24261	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
24262	// ResourceGUID - READ-ONLY; The resource GUID property of the local network gateway resource.
24263	ResourceGUID *string `json:"resourceGuid,omitempty"`
24264	// ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24265	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24266}
24267
24268// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24269// long-running operation.
24270type LocalNetworkGatewaysCreateOrUpdateFuture struct {
24271	azure.Future
24272}
24273
24274// Result returns the result of the asynchronous operation.
24275// If the operation has not completed it will return an error.
24276func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
24277	var done bool
24278	done, err = future.DoneWithContext(context.Background(), client)
24279	if err != nil {
24280		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24281		return
24282	}
24283	if !done {
24284		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
24285		return
24286	}
24287	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24288	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
24289		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
24290		if err != nil {
24291			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
24292		}
24293	}
24294	return
24295}
24296
24297// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
24298// long-running operation.
24299type LocalNetworkGatewaysDeleteFuture struct {
24300	azure.Future
24301}
24302
24303// Result returns the result of the asynchronous operation.
24304// If the operation has not completed it will return an error.
24305func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
24306	var done bool
24307	done, err = future.DoneWithContext(context.Background(), client)
24308	if err != nil {
24309		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
24310		return
24311	}
24312	if !done {
24313		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
24314		return
24315	}
24316	ar.Response = future.Response()
24317	return
24318}
24319
24320// LogSpecification description of logging specification.
24321type LogSpecification struct {
24322	// Name - The name of the specification.
24323	Name *string `json:"name,omitempty"`
24324	// DisplayName - The display name of the specification.
24325	DisplayName *string `json:"displayName,omitempty"`
24326	// BlobDuration - Duration of the blob.
24327	BlobDuration *string `json:"blobDuration,omitempty"`
24328}
24329
24330// ManagedRuleGroupOverride defines a managed rule group override setting.
24331type ManagedRuleGroupOverride struct {
24332	// RuleGroupName - The managed rule group to override.
24333	RuleGroupName *string `json:"ruleGroupName,omitempty"`
24334	// Rules - List of rules that will be disabled. If none specified, all rules in the group will be disabled.
24335	Rules *[]ManagedRuleOverride `json:"rules,omitempty"`
24336}
24337
24338// ManagedRuleOverride defines a managed rule group override setting.
24339type ManagedRuleOverride struct {
24340	// RuleID - Identifier for the managed rule.
24341	RuleID *string `json:"ruleId,omitempty"`
24342	// State - The state of the managed rule. Defaults to Disabled if not specified. Possible values include: 'ManagedRuleEnabledStateDisabled'
24343	State ManagedRuleEnabledState `json:"state,omitempty"`
24344}
24345
24346// ManagedRulesDefinition allow to exclude some variable satisfy the condition for the WAF check.
24347type ManagedRulesDefinition struct {
24348	// Exclusions - The Exclusions that are applied on the policy.
24349	Exclusions *[]OwaspCrsExclusionEntry `json:"exclusions,omitempty"`
24350	// ManagedRuleSets - The managed rule sets that are associated with the policy.
24351	ManagedRuleSets *[]ManagedRuleSet `json:"managedRuleSets,omitempty"`
24352}
24353
24354// ManagedRuleSet defines a managed rule set.
24355type ManagedRuleSet struct {
24356	// RuleSetType - Defines the rule set type to use.
24357	RuleSetType *string `json:"ruleSetType,omitempty"`
24358	// RuleSetVersion - Defines the version of the rule set to use.
24359	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
24360	// RuleGroupOverrides - Defines the rule group overrides to apply to the rule set.
24361	RuleGroupOverrides *[]ManagedRuleGroupOverride `json:"ruleGroupOverrides,omitempty"`
24362}
24363
24364// ManagedServiceIdentity identity for the resource.
24365type ManagedServiceIdentity struct {
24366	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
24367	PrincipalID *string `json:"principalId,omitempty"`
24368	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
24369	TenantID *string `json:"tenantId,omitempty"`
24370	// Type - The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone'
24371	Type ResourceIdentityType `json:"type,omitempty"`
24372	// UserAssignedIdentities - The list of user identities associated with resource. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
24373	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
24374}
24375
24376// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
24377func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
24378	objectMap := make(map[string]interface{})
24379	if msi.Type != "" {
24380		objectMap["type"] = msi.Type
24381	}
24382	if msi.UserAssignedIdentities != nil {
24383		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
24384	}
24385	return json.Marshal(objectMap)
24386}
24387
24388// ManagedServiceIdentityUserAssignedIdentitiesValue ...
24389type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
24390	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
24391	PrincipalID *string `json:"principalId,omitempty"`
24392	// ClientID - READ-ONLY; The client id of user assigned identity.
24393	ClientID *string `json:"clientId,omitempty"`
24394}
24395
24396// MatchCondition define match conditions.
24397type MatchCondition struct {
24398	// MatchVariables - List of match variables.
24399	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
24400	// Operator - The operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex', 'WebApplicationFirewallOperatorGeoMatch'
24401	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
24402	// NegationConditon - Whether this is negate condition or not.
24403	NegationConditon *bool `json:"negationConditon,omitempty"`
24404	// MatchValues - Match value.
24405	MatchValues *[]string `json:"matchValues,omitempty"`
24406	// Transforms - List of transforms.
24407	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
24408}
24409
24410// MatchedRule matched rule.
24411type MatchedRule struct {
24412	// RuleName - Name of the matched network security rule.
24413	RuleName *string `json:"ruleName,omitempty"`
24414	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
24415	Action *string `json:"action,omitempty"`
24416}
24417
24418// MatchVariable define match variables.
24419type MatchVariable struct {
24420	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
24421	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
24422	// Selector - The selector of match variable.
24423	Selector *string `json:"selector,omitempty"`
24424}
24425
24426// MetricSpecification description of metrics specification.
24427type MetricSpecification struct {
24428	// Name - The name of the metric.
24429	Name *string `json:"name,omitempty"`
24430	// DisplayName - The display name of the metric.
24431	DisplayName *string `json:"displayName,omitempty"`
24432	// DisplayDescription - The description of the metric.
24433	DisplayDescription *string `json:"displayDescription,omitempty"`
24434	// Unit - Units the metric to be displayed in.
24435	Unit *string `json:"unit,omitempty"`
24436	// AggregationType - The aggregation type.
24437	AggregationType *string `json:"aggregationType,omitempty"`
24438	// Availabilities - List of availability.
24439	Availabilities *[]Availability `json:"availabilities,omitempty"`
24440	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
24441	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
24442	// FillGapWithZero - Whether gaps would be filled with zeros.
24443	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
24444	// MetricFilterPattern - Pattern for the filter of the metric.
24445	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
24446	// Dimensions - List of dimensions.
24447	Dimensions *[]Dimension `json:"dimensions,omitempty"`
24448	// IsInternal - Whether the metric is internal.
24449	IsInternal *bool `json:"isInternal,omitempty"`
24450	// SourceMdmAccount - The source MDM account.
24451	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
24452	// SourceMdmNamespace - The source MDM namespace.
24453	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
24454	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
24455	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
24456}
24457
24458// NatGateway nat Gateway resource.
24459type NatGateway struct {
24460	autorest.Response `json:"-"`
24461	// Sku - The nat gateway SKU.
24462	Sku *NatGatewaySku `json:"sku,omitempty"`
24463	// NatGatewayPropertiesFormat - Nat Gateway properties.
24464	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
24465	// Zones - A list of availability zones denoting the zone in which Nat Gateway should be deployed.
24466	Zones *[]string `json:"zones,omitempty"`
24467	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24468	Etag *string `json:"etag,omitempty"`
24469	// ID - Resource ID.
24470	ID *string `json:"id,omitempty"`
24471	// Name - READ-ONLY; Resource name.
24472	Name *string `json:"name,omitempty"`
24473	// Type - READ-ONLY; Resource type.
24474	Type *string `json:"type,omitempty"`
24475	// Location - Resource location.
24476	Location *string `json:"location,omitempty"`
24477	// Tags - Resource tags.
24478	Tags map[string]*string `json:"tags"`
24479}
24480
24481// MarshalJSON is the custom marshaler for NatGateway.
24482func (ng NatGateway) MarshalJSON() ([]byte, error) {
24483	objectMap := make(map[string]interface{})
24484	if ng.Sku != nil {
24485		objectMap["sku"] = ng.Sku
24486	}
24487	if ng.NatGatewayPropertiesFormat != nil {
24488		objectMap["properties"] = ng.NatGatewayPropertiesFormat
24489	}
24490	if ng.Zones != nil {
24491		objectMap["zones"] = ng.Zones
24492	}
24493	if ng.ID != nil {
24494		objectMap["id"] = ng.ID
24495	}
24496	if ng.Location != nil {
24497		objectMap["location"] = ng.Location
24498	}
24499	if ng.Tags != nil {
24500		objectMap["tags"] = ng.Tags
24501	}
24502	return json.Marshal(objectMap)
24503}
24504
24505// UnmarshalJSON is the custom unmarshaler for NatGateway struct.
24506func (ng *NatGateway) UnmarshalJSON(body []byte) error {
24507	var m map[string]*json.RawMessage
24508	err := json.Unmarshal(body, &m)
24509	if err != nil {
24510		return err
24511	}
24512	for k, v := range m {
24513		switch k {
24514		case "sku":
24515			if v != nil {
24516				var sku NatGatewaySku
24517				err = json.Unmarshal(*v, &sku)
24518				if err != nil {
24519					return err
24520				}
24521				ng.Sku = &sku
24522			}
24523		case "properties":
24524			if v != nil {
24525				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
24526				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
24527				if err != nil {
24528					return err
24529				}
24530				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
24531			}
24532		case "zones":
24533			if v != nil {
24534				var zones []string
24535				err = json.Unmarshal(*v, &zones)
24536				if err != nil {
24537					return err
24538				}
24539				ng.Zones = &zones
24540			}
24541		case "etag":
24542			if v != nil {
24543				var etag string
24544				err = json.Unmarshal(*v, &etag)
24545				if err != nil {
24546					return err
24547				}
24548				ng.Etag = &etag
24549			}
24550		case "id":
24551			if v != nil {
24552				var ID string
24553				err = json.Unmarshal(*v, &ID)
24554				if err != nil {
24555					return err
24556				}
24557				ng.ID = &ID
24558			}
24559		case "name":
24560			if v != nil {
24561				var name string
24562				err = json.Unmarshal(*v, &name)
24563				if err != nil {
24564					return err
24565				}
24566				ng.Name = &name
24567			}
24568		case "type":
24569			if v != nil {
24570				var typeVar string
24571				err = json.Unmarshal(*v, &typeVar)
24572				if err != nil {
24573					return err
24574				}
24575				ng.Type = &typeVar
24576			}
24577		case "location":
24578			if v != nil {
24579				var location string
24580				err = json.Unmarshal(*v, &location)
24581				if err != nil {
24582					return err
24583				}
24584				ng.Location = &location
24585			}
24586		case "tags":
24587			if v != nil {
24588				var tags map[string]*string
24589				err = json.Unmarshal(*v, &tags)
24590				if err != nil {
24591					return err
24592				}
24593				ng.Tags = tags
24594			}
24595		}
24596	}
24597
24598	return nil
24599}
24600
24601// NatGatewayListResult response for ListNatGateways API service call.
24602type NatGatewayListResult struct {
24603	autorest.Response `json:"-"`
24604	// Value - A list of Nat Gateways that exists in a resource group.
24605	Value *[]NatGateway `json:"value,omitempty"`
24606	// NextLink - The URL to get the next set of results.
24607	NextLink *string `json:"nextLink,omitempty"`
24608}
24609
24610// NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
24611type NatGatewayListResultIterator struct {
24612	i    int
24613	page NatGatewayListResultPage
24614}
24615
24616// NextWithContext advances to the next value.  If there was an error making
24617// the request the iterator does not advance and the error is returned.
24618func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
24619	if tracing.IsEnabled() {
24620		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
24621		defer func() {
24622			sc := -1
24623			if iter.Response().Response.Response != nil {
24624				sc = iter.Response().Response.Response.StatusCode
24625			}
24626			tracing.EndSpan(ctx, sc, err)
24627		}()
24628	}
24629	iter.i++
24630	if iter.i < len(iter.page.Values()) {
24631		return nil
24632	}
24633	err = iter.page.NextWithContext(ctx)
24634	if err != nil {
24635		iter.i--
24636		return err
24637	}
24638	iter.i = 0
24639	return nil
24640}
24641
24642// Next advances to the next value.  If there was an error making
24643// the request the iterator does not advance and the error is returned.
24644// Deprecated: Use NextWithContext() instead.
24645func (iter *NatGatewayListResultIterator) Next() error {
24646	return iter.NextWithContext(context.Background())
24647}
24648
24649// NotDone returns true if the enumeration should be started or is not yet complete.
24650func (iter NatGatewayListResultIterator) NotDone() bool {
24651	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24652}
24653
24654// Response returns the raw server response from the last page request.
24655func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
24656	return iter.page.Response()
24657}
24658
24659// Value returns the current value or a zero-initialized value if the
24660// iterator has advanced beyond the end of the collection.
24661func (iter NatGatewayListResultIterator) Value() NatGateway {
24662	if !iter.page.NotDone() {
24663		return NatGateway{}
24664	}
24665	return iter.page.Values()[iter.i]
24666}
24667
24668// Creates a new instance of the NatGatewayListResultIterator type.
24669func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
24670	return NatGatewayListResultIterator{page: page}
24671}
24672
24673// IsEmpty returns true if the ListResult contains no values.
24674func (nglr NatGatewayListResult) IsEmpty() bool {
24675	return nglr.Value == nil || len(*nglr.Value) == 0
24676}
24677
24678// natGatewayListResultPreparer prepares a request to retrieve the next set of results.
24679// It returns nil if no more results exist.
24680func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
24681	if nglr.NextLink == nil || len(to.String(nglr.NextLink)) < 1 {
24682		return nil, nil
24683	}
24684	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24685		autorest.AsJSON(),
24686		autorest.AsGet(),
24687		autorest.WithBaseURL(to.String(nglr.NextLink)))
24688}
24689
24690// NatGatewayListResultPage contains a page of NatGateway values.
24691type NatGatewayListResultPage struct {
24692	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
24693	nglr NatGatewayListResult
24694}
24695
24696// NextWithContext advances to the next page of values.  If there was an error making
24697// the request the page does not advance and the error is returned.
24698func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
24699	if tracing.IsEnabled() {
24700		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
24701		defer func() {
24702			sc := -1
24703			if page.Response().Response.Response != nil {
24704				sc = page.Response().Response.Response.StatusCode
24705			}
24706			tracing.EndSpan(ctx, sc, err)
24707		}()
24708	}
24709	next, err := page.fn(ctx, page.nglr)
24710	if err != nil {
24711		return err
24712	}
24713	page.nglr = next
24714	return nil
24715}
24716
24717// Next advances to the next page of values.  If there was an error making
24718// the request the page does not advance and the error is returned.
24719// Deprecated: Use NextWithContext() instead.
24720func (page *NatGatewayListResultPage) Next() error {
24721	return page.NextWithContext(context.Background())
24722}
24723
24724// NotDone returns true if the page enumeration should be started or is not yet complete.
24725func (page NatGatewayListResultPage) NotDone() bool {
24726	return !page.nglr.IsEmpty()
24727}
24728
24729// Response returns the raw server response from the last page request.
24730func (page NatGatewayListResultPage) Response() NatGatewayListResult {
24731	return page.nglr
24732}
24733
24734// Values returns the slice of values for the current page or nil if there are no values.
24735func (page NatGatewayListResultPage) Values() []NatGateway {
24736	if page.nglr.IsEmpty() {
24737		return nil
24738	}
24739	return *page.nglr.Value
24740}
24741
24742// Creates a new instance of the NatGatewayListResultPage type.
24743func NewNatGatewayListResultPage(getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
24744	return NatGatewayListResultPage{fn: getNextPage}
24745}
24746
24747// NatGatewayPropertiesFormat nat Gateway properties.
24748type NatGatewayPropertiesFormat struct {
24749	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
24750	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
24751	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
24752	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
24753	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
24754	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
24755	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
24756	Subnets *[]SubResource `json:"subnets,omitempty"`
24757	// ResourceGUID - READ-ONLY; The resource GUID property of the NAT gateway resource.
24758	ResourceGUID *string `json:"resourceGuid,omitempty"`
24759	// ProvisioningState - READ-ONLY; The provisioning state of the NAT gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24760	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24761}
24762
24763// NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24764// long-running operation.
24765type NatGatewaysCreateOrUpdateFuture struct {
24766	azure.Future
24767}
24768
24769// Result returns the result of the asynchronous operation.
24770// If the operation has not completed it will return an error.
24771func (future *NatGatewaysCreateOrUpdateFuture) Result(client NatGatewaysClient) (ng NatGateway, err error) {
24772	var done bool
24773	done, err = future.DoneWithContext(context.Background(), client)
24774	if err != nil {
24775		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24776		return
24777	}
24778	if !done {
24779		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
24780		return
24781	}
24782	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24783	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
24784		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
24785		if err != nil {
24786			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
24787		}
24788	}
24789	return
24790}
24791
24792// NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24793// operation.
24794type NatGatewaysDeleteFuture struct {
24795	azure.Future
24796}
24797
24798// Result returns the result of the asynchronous operation.
24799// If the operation has not completed it will return an error.
24800func (future *NatGatewaysDeleteFuture) Result(client NatGatewaysClient) (ar autorest.Response, err error) {
24801	var done bool
24802	done, err = future.DoneWithContext(context.Background(), client)
24803	if err != nil {
24804		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
24805		return
24806	}
24807	if !done {
24808		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
24809		return
24810	}
24811	ar.Response = future.Response()
24812	return
24813}
24814
24815// NatGatewaySku SKU of nat gateway.
24816type NatGatewaySku struct {
24817	// Name - Name of Nat Gateway SKU. Possible values include: 'NatGatewaySkuNameStandard'
24818	Name NatGatewaySkuName `json:"name,omitempty"`
24819}
24820
24821// NatRule rule of type nat.
24822type NatRule struct {
24823	// IPProtocols - Array of FirewallPolicyRuleNetworkProtocols.
24824	IPProtocols *[]FirewallPolicyRuleNetworkProtocol `json:"ipProtocols,omitempty"`
24825	// SourceAddresses - List of source IP addresses for this rule.
24826	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
24827	// DestinationAddresses - List of destination IP addresses or Service Tags.
24828	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
24829	// DestinationPorts - List of destination ports.
24830	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
24831	// TranslatedAddress - The translated address for this NAT rule.
24832	TranslatedAddress *string `json:"translatedAddress,omitempty"`
24833	// TranslatedPort - The translated port for this NAT rule.
24834	TranslatedPort *string `json:"translatedPort,omitempty"`
24835	// SourceIPGroups - List of source IpGroups for this rule.
24836	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
24837	// Name - Name of the rule.
24838	Name *string `json:"name,omitempty"`
24839	// Description - Description of the rule.
24840	Description *string `json:"description,omitempty"`
24841	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeApplicationRule', 'RuleTypeNatRule', 'RuleTypeNetworkRule'
24842	RuleType RuleType `json:"ruleType,omitempty"`
24843}
24844
24845// MarshalJSON is the custom marshaler for NatRule.
24846func (nr NatRule) MarshalJSON() ([]byte, error) {
24847	nr.RuleType = RuleTypeNatRule
24848	objectMap := make(map[string]interface{})
24849	if nr.IPProtocols != nil {
24850		objectMap["ipProtocols"] = nr.IPProtocols
24851	}
24852	if nr.SourceAddresses != nil {
24853		objectMap["sourceAddresses"] = nr.SourceAddresses
24854	}
24855	if nr.DestinationAddresses != nil {
24856		objectMap["destinationAddresses"] = nr.DestinationAddresses
24857	}
24858	if nr.DestinationPorts != nil {
24859		objectMap["destinationPorts"] = nr.DestinationPorts
24860	}
24861	if nr.TranslatedAddress != nil {
24862		objectMap["translatedAddress"] = nr.TranslatedAddress
24863	}
24864	if nr.TranslatedPort != nil {
24865		objectMap["translatedPort"] = nr.TranslatedPort
24866	}
24867	if nr.SourceIPGroups != nil {
24868		objectMap["sourceIpGroups"] = nr.SourceIPGroups
24869	}
24870	if nr.Name != nil {
24871		objectMap["name"] = nr.Name
24872	}
24873	if nr.Description != nil {
24874		objectMap["description"] = nr.Description
24875	}
24876	if nr.RuleType != "" {
24877		objectMap["ruleType"] = nr.RuleType
24878	}
24879	return json.Marshal(objectMap)
24880}
24881
24882// AsApplicationRule is the BasicFirewallPolicyRule implementation for NatRule.
24883func (nr NatRule) AsApplicationRule() (*ApplicationRule, bool) {
24884	return nil, false
24885}
24886
24887// AsNatRule is the BasicFirewallPolicyRule implementation for NatRule.
24888func (nr NatRule) AsNatRule() (*NatRule, bool) {
24889	return &nr, true
24890}
24891
24892// AsRule is the BasicFirewallPolicyRule implementation for NatRule.
24893func (nr NatRule) AsRule() (*Rule, bool) {
24894	return nil, false
24895}
24896
24897// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for NatRule.
24898func (nr NatRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
24899	return nil, false
24900}
24901
24902// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for NatRule.
24903func (nr NatRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
24904	return &nr, true
24905}
24906
24907// NextHopParameters parameters that define the source and destination endpoint.
24908type NextHopParameters struct {
24909	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
24910	TargetResourceID *string `json:"targetResourceId,omitempty"`
24911	// SourceIPAddress - The source IP address.
24912	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
24913	// DestinationIPAddress - The destination IP address.
24914	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
24915	// TargetNicResourceID - The NIC ID. (If VM has multiple NICs and IP forwarding is enabled on any of the nics, then this parameter must be specified. Otherwise optional).
24916	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
24917}
24918
24919// NextHopResult the information about next hop from the specified VM.
24920type NextHopResult struct {
24921	autorest.Response `json:"-"`
24922	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
24923	NextHopType NextHopType `json:"nextHopType,omitempty"`
24924	// NextHopIPAddress - Next hop IP Address.
24925	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
24926	// RouteTableID - The resource identifier for the route table associated with the route being returned. If the route being returned does not correspond to any user created routes then this field will be the string 'System Route'.
24927	RouteTableID *string `json:"routeTableId,omitempty"`
24928}
24929
24930// Office365PolicyProperties network Virtual Appliance Sku Properties.
24931type Office365PolicyProperties struct {
24932	// BreakOutCategories - Office 365 breakout categories.
24933	BreakOutCategories *BreakOutCategoryPolicies `json:"breakOutCategories,omitempty"`
24934}
24935
24936// Operation network REST API operation definition.
24937type Operation struct {
24938	// Name - Operation name: {provider}/{resource}/{operation}.
24939	Name *string `json:"name,omitempty"`
24940	// Display - Display metadata associated with the operation.
24941	Display *OperationDisplay `json:"display,omitempty"`
24942	// Origin - Origin of the operation.
24943	Origin *string `json:"origin,omitempty"`
24944	// OperationPropertiesFormat - Operation properties format.
24945	*OperationPropertiesFormat `json:"properties,omitempty"`
24946}
24947
24948// MarshalJSON is the custom marshaler for Operation.
24949func (o Operation) MarshalJSON() ([]byte, error) {
24950	objectMap := make(map[string]interface{})
24951	if o.Name != nil {
24952		objectMap["name"] = o.Name
24953	}
24954	if o.Display != nil {
24955		objectMap["display"] = o.Display
24956	}
24957	if o.Origin != nil {
24958		objectMap["origin"] = o.Origin
24959	}
24960	if o.OperationPropertiesFormat != nil {
24961		objectMap["properties"] = o.OperationPropertiesFormat
24962	}
24963	return json.Marshal(objectMap)
24964}
24965
24966// UnmarshalJSON is the custom unmarshaler for Operation struct.
24967func (o *Operation) UnmarshalJSON(body []byte) error {
24968	var m map[string]*json.RawMessage
24969	err := json.Unmarshal(body, &m)
24970	if err != nil {
24971		return err
24972	}
24973	for k, v := range m {
24974		switch k {
24975		case "name":
24976			if v != nil {
24977				var name string
24978				err = json.Unmarshal(*v, &name)
24979				if err != nil {
24980					return err
24981				}
24982				o.Name = &name
24983			}
24984		case "display":
24985			if v != nil {
24986				var display OperationDisplay
24987				err = json.Unmarshal(*v, &display)
24988				if err != nil {
24989					return err
24990				}
24991				o.Display = &display
24992			}
24993		case "origin":
24994			if v != nil {
24995				var origin string
24996				err = json.Unmarshal(*v, &origin)
24997				if err != nil {
24998					return err
24999				}
25000				o.Origin = &origin
25001			}
25002		case "properties":
25003			if v != nil {
25004				var operationPropertiesFormat OperationPropertiesFormat
25005				err = json.Unmarshal(*v, &operationPropertiesFormat)
25006				if err != nil {
25007					return err
25008				}
25009				o.OperationPropertiesFormat = &operationPropertiesFormat
25010			}
25011		}
25012	}
25013
25014	return nil
25015}
25016
25017// OperationDisplay display metadata associated with the operation.
25018type OperationDisplay struct {
25019	// Provider - Service provider: Microsoft Network.
25020	Provider *string `json:"provider,omitempty"`
25021	// Resource - Resource on which the operation is performed.
25022	Resource *string `json:"resource,omitempty"`
25023	// Operation - Type of the operation: get, read, delete, etc.
25024	Operation *string `json:"operation,omitempty"`
25025	// Description - Description of the operation.
25026	Description *string `json:"description,omitempty"`
25027}
25028
25029// OperationListResult result of the request to list Network operations. It contains a list of operations
25030// and a URL link to get the next set of results.
25031type OperationListResult struct {
25032	autorest.Response `json:"-"`
25033	// Value - List of Network operations supported by the Network resource provider.
25034	Value *[]Operation `json:"value,omitempty"`
25035	// NextLink - URL to get the next set of operation list results if there are any.
25036	NextLink *string `json:"nextLink,omitempty"`
25037}
25038
25039// OperationListResultIterator provides access to a complete listing of Operation values.
25040type OperationListResultIterator struct {
25041	i    int
25042	page OperationListResultPage
25043}
25044
25045// NextWithContext advances to the next value.  If there was an error making
25046// the request the iterator does not advance and the error is returned.
25047func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
25048	if tracing.IsEnabled() {
25049		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
25050		defer func() {
25051			sc := -1
25052			if iter.Response().Response.Response != nil {
25053				sc = iter.Response().Response.Response.StatusCode
25054			}
25055			tracing.EndSpan(ctx, sc, err)
25056		}()
25057	}
25058	iter.i++
25059	if iter.i < len(iter.page.Values()) {
25060		return nil
25061	}
25062	err = iter.page.NextWithContext(ctx)
25063	if err != nil {
25064		iter.i--
25065		return err
25066	}
25067	iter.i = 0
25068	return nil
25069}
25070
25071// Next advances to the next value.  If there was an error making
25072// the request the iterator does not advance and the error is returned.
25073// Deprecated: Use NextWithContext() instead.
25074func (iter *OperationListResultIterator) Next() error {
25075	return iter.NextWithContext(context.Background())
25076}
25077
25078// NotDone returns true if the enumeration should be started or is not yet complete.
25079func (iter OperationListResultIterator) NotDone() bool {
25080	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25081}
25082
25083// Response returns the raw server response from the last page request.
25084func (iter OperationListResultIterator) Response() OperationListResult {
25085	return iter.page.Response()
25086}
25087
25088// Value returns the current value or a zero-initialized value if the
25089// iterator has advanced beyond the end of the collection.
25090func (iter OperationListResultIterator) Value() Operation {
25091	if !iter.page.NotDone() {
25092		return Operation{}
25093	}
25094	return iter.page.Values()[iter.i]
25095}
25096
25097// Creates a new instance of the OperationListResultIterator type.
25098func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
25099	return OperationListResultIterator{page: page}
25100}
25101
25102// IsEmpty returns true if the ListResult contains no values.
25103func (olr OperationListResult) IsEmpty() bool {
25104	return olr.Value == nil || len(*olr.Value) == 0
25105}
25106
25107// operationListResultPreparer prepares a request to retrieve the next set of results.
25108// It returns nil if no more results exist.
25109func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
25110	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
25111		return nil, nil
25112	}
25113	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25114		autorest.AsJSON(),
25115		autorest.AsGet(),
25116		autorest.WithBaseURL(to.String(olr.NextLink)))
25117}
25118
25119// OperationListResultPage contains a page of Operation values.
25120type OperationListResultPage struct {
25121	fn  func(context.Context, OperationListResult) (OperationListResult, error)
25122	olr OperationListResult
25123}
25124
25125// NextWithContext advances to the next page of values.  If there was an error making
25126// the request the page does not advance and the error is returned.
25127func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
25128	if tracing.IsEnabled() {
25129		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
25130		defer func() {
25131			sc := -1
25132			if page.Response().Response.Response != nil {
25133				sc = page.Response().Response.Response.StatusCode
25134			}
25135			tracing.EndSpan(ctx, sc, err)
25136		}()
25137	}
25138	next, err := page.fn(ctx, page.olr)
25139	if err != nil {
25140		return err
25141	}
25142	page.olr = next
25143	return nil
25144}
25145
25146// Next advances to the next page of values.  If there was an error making
25147// the request the page does not advance and the error is returned.
25148// Deprecated: Use NextWithContext() instead.
25149func (page *OperationListResultPage) Next() error {
25150	return page.NextWithContext(context.Background())
25151}
25152
25153// NotDone returns true if the page enumeration should be started or is not yet complete.
25154func (page OperationListResultPage) NotDone() bool {
25155	return !page.olr.IsEmpty()
25156}
25157
25158// Response returns the raw server response from the last page request.
25159func (page OperationListResultPage) Response() OperationListResult {
25160	return page.olr
25161}
25162
25163// Values returns the slice of values for the current page or nil if there are no values.
25164func (page OperationListResultPage) Values() []Operation {
25165	if page.olr.IsEmpty() {
25166		return nil
25167	}
25168	return *page.olr.Value
25169}
25170
25171// Creates a new instance of the OperationListResultPage type.
25172func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
25173	return OperationListResultPage{fn: getNextPage}
25174}
25175
25176// OperationPropertiesFormat description of operation properties format.
25177type OperationPropertiesFormat struct {
25178	// ServiceSpecification - Specification of the service.
25179	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
25180}
25181
25182// OperationPropertiesFormatServiceSpecification specification of the service.
25183type OperationPropertiesFormatServiceSpecification struct {
25184	// MetricSpecifications - Operation service specification.
25185	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
25186	// LogSpecifications - Operation log specification.
25187	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
25188}
25189
25190// OutboundRule outbound rule of the load balancer.
25191type OutboundRule struct {
25192	autorest.Response `json:"-"`
25193	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
25194	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
25195	// Name - The name of the resource that is unique within the set of outbound rules used by the load balancer. This name can be used to access the resource.
25196	Name *string `json:"name,omitempty"`
25197	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25198	Etag *string `json:"etag,omitempty"`
25199	// Type - READ-ONLY; Type of the resource.
25200	Type *string `json:"type,omitempty"`
25201	// ID - Resource ID.
25202	ID *string `json:"id,omitempty"`
25203}
25204
25205// MarshalJSON is the custom marshaler for OutboundRule.
25206func (or OutboundRule) MarshalJSON() ([]byte, error) {
25207	objectMap := make(map[string]interface{})
25208	if or.OutboundRulePropertiesFormat != nil {
25209		objectMap["properties"] = or.OutboundRulePropertiesFormat
25210	}
25211	if or.Name != nil {
25212		objectMap["name"] = or.Name
25213	}
25214	if or.ID != nil {
25215		objectMap["id"] = or.ID
25216	}
25217	return json.Marshal(objectMap)
25218}
25219
25220// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
25221func (or *OutboundRule) UnmarshalJSON(body []byte) error {
25222	var m map[string]*json.RawMessage
25223	err := json.Unmarshal(body, &m)
25224	if err != nil {
25225		return err
25226	}
25227	for k, v := range m {
25228		switch k {
25229		case "properties":
25230			if v != nil {
25231				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
25232				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
25233				if err != nil {
25234					return err
25235				}
25236				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
25237			}
25238		case "name":
25239			if v != nil {
25240				var name string
25241				err = json.Unmarshal(*v, &name)
25242				if err != nil {
25243					return err
25244				}
25245				or.Name = &name
25246			}
25247		case "etag":
25248			if v != nil {
25249				var etag string
25250				err = json.Unmarshal(*v, &etag)
25251				if err != nil {
25252					return err
25253				}
25254				or.Etag = &etag
25255			}
25256		case "type":
25257			if v != nil {
25258				var typeVar string
25259				err = json.Unmarshal(*v, &typeVar)
25260				if err != nil {
25261					return err
25262				}
25263				or.Type = &typeVar
25264			}
25265		case "id":
25266			if v != nil {
25267				var ID string
25268				err = json.Unmarshal(*v, &ID)
25269				if err != nil {
25270					return err
25271				}
25272				or.ID = &ID
25273			}
25274		}
25275	}
25276
25277	return nil
25278}
25279
25280// OutboundRulePropertiesFormat outbound rule of the load balancer.
25281type OutboundRulePropertiesFormat struct {
25282	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
25283	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
25284	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
25285	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
25286	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
25287	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
25288	// ProvisioningState - READ-ONLY; The provisioning state of the outbound rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25289	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25290	// Protocol - The protocol for the outbound rule in load balancer. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
25291	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
25292	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
25293	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
25294	// IdleTimeoutInMinutes - The timeout for the TCP idle connection.
25295	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
25296}
25297
25298// OwaspCrsExclusionEntry allow to exclude some variable satisfy the condition for the WAF check.
25299type OwaspCrsExclusionEntry struct {
25300	// MatchVariable - The variable to be excluded. Possible values include: 'RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames'
25301	MatchVariable OwaspCrsExclusionEntryMatchVariable `json:"matchVariable,omitempty"`
25302	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. Possible values include: 'OwaspCrsExclusionEntrySelectorMatchOperatorEquals', 'OwaspCrsExclusionEntrySelectorMatchOperatorContains', 'OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny'
25303	SelectorMatchOperator OwaspCrsExclusionEntrySelectorMatchOperator `json:"selectorMatchOperator,omitempty"`
25304	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
25305	Selector *string `json:"selector,omitempty"`
25306}
25307
25308// P2SConnectionConfiguration p2SConnectionConfiguration Resource.
25309type P2SConnectionConfiguration struct {
25310	// P2SConnectionConfigurationProperties - Properties of the P2S connection configuration.
25311	*P2SConnectionConfigurationProperties `json:"properties,omitempty"`
25312	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
25313	Name *string `json:"name,omitempty"`
25314	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25315	Etag *string `json:"etag,omitempty"`
25316	// ID - Resource ID.
25317	ID *string `json:"id,omitempty"`
25318}
25319
25320// MarshalJSON is the custom marshaler for P2SConnectionConfiguration.
25321func (pcc P2SConnectionConfiguration) MarshalJSON() ([]byte, error) {
25322	objectMap := make(map[string]interface{})
25323	if pcc.P2SConnectionConfigurationProperties != nil {
25324		objectMap["properties"] = pcc.P2SConnectionConfigurationProperties
25325	}
25326	if pcc.Name != nil {
25327		objectMap["name"] = pcc.Name
25328	}
25329	if pcc.ID != nil {
25330		objectMap["id"] = pcc.ID
25331	}
25332	return json.Marshal(objectMap)
25333}
25334
25335// UnmarshalJSON is the custom unmarshaler for P2SConnectionConfiguration struct.
25336func (pcc *P2SConnectionConfiguration) UnmarshalJSON(body []byte) error {
25337	var m map[string]*json.RawMessage
25338	err := json.Unmarshal(body, &m)
25339	if err != nil {
25340		return err
25341	}
25342	for k, v := range m {
25343		switch k {
25344		case "properties":
25345			if v != nil {
25346				var p2SConnectionConfigurationProperties P2SConnectionConfigurationProperties
25347				err = json.Unmarshal(*v, &p2SConnectionConfigurationProperties)
25348				if err != nil {
25349					return err
25350				}
25351				pcc.P2SConnectionConfigurationProperties = &p2SConnectionConfigurationProperties
25352			}
25353		case "name":
25354			if v != nil {
25355				var name string
25356				err = json.Unmarshal(*v, &name)
25357				if err != nil {
25358					return err
25359				}
25360				pcc.Name = &name
25361			}
25362		case "etag":
25363			if v != nil {
25364				var etag string
25365				err = json.Unmarshal(*v, &etag)
25366				if err != nil {
25367					return err
25368				}
25369				pcc.Etag = &etag
25370			}
25371		case "id":
25372			if v != nil {
25373				var ID string
25374				err = json.Unmarshal(*v, &ID)
25375				if err != nil {
25376					return err
25377				}
25378				pcc.ID = &ID
25379			}
25380		}
25381	}
25382
25383	return nil
25384}
25385
25386// P2SConnectionConfigurationProperties parameters for P2SConnectionConfiguration.
25387type P2SConnectionConfigurationProperties struct {
25388	// VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient.
25389	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
25390	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
25391	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
25392	// ProvisioningState - READ-ONLY; The provisioning state of the P2SConnectionConfiguration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25393	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25394}
25395
25396// P2SVpnConnectionHealth p2S Vpn connection detailed health written to sas url.
25397type P2SVpnConnectionHealth struct {
25398	autorest.Response `json:"-"`
25399	// SasURL - Returned sas url of the blob to which the p2s vpn connection detailed health will be written.
25400	SasURL *string `json:"sasUrl,omitempty"`
25401}
25402
25403// P2SVpnConnectionHealthRequest list of P2S Vpn connection health request.
25404type P2SVpnConnectionHealthRequest struct {
25405	// VpnUserNamesFilter - The list of p2s vpn user names whose p2s vpn connection detailed health to retrieve for.
25406	VpnUserNamesFilter *[]string `json:"vpnUserNamesFilter,omitempty"`
25407	// OutputBlobSasURL - The sas-url to download the P2S Vpn connection health detail.
25408	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
25409}
25410
25411// P2SVpnConnectionRequest list of p2s vpn connections to be disconnected.
25412type P2SVpnConnectionRequest struct {
25413	// VpnConnectionIds - List of p2s vpn connection Ids.
25414	VpnConnectionIds *[]string `json:"vpnConnectionIds,omitempty"`
25415}
25416
25417// P2SVpnGateway p2SVpnGateway Resource.
25418type P2SVpnGateway struct {
25419	autorest.Response `json:"-"`
25420	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
25421	*P2SVpnGatewayProperties `json:"properties,omitempty"`
25422	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25423	Etag *string `json:"etag,omitempty"`
25424	// ID - Resource ID.
25425	ID *string `json:"id,omitempty"`
25426	// Name - READ-ONLY; Resource name.
25427	Name *string `json:"name,omitempty"`
25428	// Type - READ-ONLY; Resource type.
25429	Type *string `json:"type,omitempty"`
25430	// Location - Resource location.
25431	Location *string `json:"location,omitempty"`
25432	// Tags - Resource tags.
25433	Tags map[string]*string `json:"tags"`
25434}
25435
25436// MarshalJSON is the custom marshaler for P2SVpnGateway.
25437func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
25438	objectMap := make(map[string]interface{})
25439	if pvg.P2SVpnGatewayProperties != nil {
25440		objectMap["properties"] = pvg.P2SVpnGatewayProperties
25441	}
25442	if pvg.ID != nil {
25443		objectMap["id"] = pvg.ID
25444	}
25445	if pvg.Location != nil {
25446		objectMap["location"] = pvg.Location
25447	}
25448	if pvg.Tags != nil {
25449		objectMap["tags"] = pvg.Tags
25450	}
25451	return json.Marshal(objectMap)
25452}
25453
25454// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
25455func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
25456	var m map[string]*json.RawMessage
25457	err := json.Unmarshal(body, &m)
25458	if err != nil {
25459		return err
25460	}
25461	for k, v := range m {
25462		switch k {
25463		case "properties":
25464			if v != nil {
25465				var p2SVpnGatewayProperties P2SVpnGatewayProperties
25466				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
25467				if err != nil {
25468					return err
25469				}
25470				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
25471			}
25472		case "etag":
25473			if v != nil {
25474				var etag string
25475				err = json.Unmarshal(*v, &etag)
25476				if err != nil {
25477					return err
25478				}
25479				pvg.Etag = &etag
25480			}
25481		case "id":
25482			if v != nil {
25483				var ID string
25484				err = json.Unmarshal(*v, &ID)
25485				if err != nil {
25486					return err
25487				}
25488				pvg.ID = &ID
25489			}
25490		case "name":
25491			if v != nil {
25492				var name string
25493				err = json.Unmarshal(*v, &name)
25494				if err != nil {
25495					return err
25496				}
25497				pvg.Name = &name
25498			}
25499		case "type":
25500			if v != nil {
25501				var typeVar string
25502				err = json.Unmarshal(*v, &typeVar)
25503				if err != nil {
25504					return err
25505				}
25506				pvg.Type = &typeVar
25507			}
25508		case "location":
25509			if v != nil {
25510				var location string
25511				err = json.Unmarshal(*v, &location)
25512				if err != nil {
25513					return err
25514				}
25515				pvg.Location = &location
25516			}
25517		case "tags":
25518			if v != nil {
25519				var tags map[string]*string
25520				err = json.Unmarshal(*v, &tags)
25521				if err != nil {
25522					return err
25523				}
25524				pvg.Tags = tags
25525			}
25526		}
25527	}
25528
25529	return nil
25530}
25531
25532// P2SVpnGatewayProperties parameters for P2SVpnGateway.
25533type P2SVpnGatewayProperties struct {
25534	// VirtualHub - The VirtualHub to which the gateway belongs.
25535	VirtualHub *SubResource `json:"virtualHub,omitempty"`
25536	// P2SConnectionConfigurations - List of all p2s connection configurations of the gateway.
25537	P2SConnectionConfigurations *[]P2SConnectionConfiguration `json:"p2SConnectionConfigurations,omitempty"`
25538	// ProvisioningState - READ-ONLY; The provisioning state of the P2S VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25539	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25540	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
25541	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
25542	// VpnServerConfiguration - The VpnServerConfiguration to which the p2sVpnGateway is attached to.
25543	VpnServerConfiguration *SubResource `json:"vpnServerConfiguration,omitempty"`
25544	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
25545	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
25546	// CustomDNSServers - List of all customer specified DNS servers IP addresses.
25547	CustomDNSServers *[]string `json:"customDnsServers,omitempty"`
25548}
25549
25550// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25551// long-running operation.
25552type P2sVpnGatewaysCreateOrUpdateFuture struct {
25553	azure.Future
25554}
25555
25556// Result returns the result of the asynchronous operation.
25557// If the operation has not completed it will return an error.
25558func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
25559	var done bool
25560	done, err = future.DoneWithContext(context.Background(), client)
25561	if err != nil {
25562		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25563		return
25564	}
25565	if !done {
25566		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
25567		return
25568	}
25569	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25570	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
25571		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
25572		if err != nil {
25573			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
25574		}
25575	}
25576	return
25577}
25578
25579// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25580// operation.
25581type P2sVpnGatewaysDeleteFuture struct {
25582	azure.Future
25583}
25584
25585// Result returns the result of the asynchronous operation.
25586// If the operation has not completed it will return an error.
25587func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
25588	var done bool
25589	done, err = future.DoneWithContext(context.Background(), client)
25590	if err != nil {
25591		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
25592		return
25593	}
25594	if !done {
25595		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
25596		return
25597	}
25598	ar.Response = future.Response()
25599	return
25600}
25601
25602// P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture an abstraction for monitoring and retrieving the results
25603// of a long-running operation.
25604type P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture struct {
25605	azure.Future
25606}
25607
25608// Result returns the result of the asynchronous operation.
25609// If the operation has not completed it will return an error.
25610func (future *P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
25611	var done bool
25612	done, err = future.DoneWithContext(context.Background(), client)
25613	if err != nil {
25614		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
25615		return
25616	}
25617	if !done {
25618		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture")
25619		return
25620	}
25621	ar.Response = future.Response()
25622	return
25623}
25624
25625// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
25626// long-running operation.
25627type P2sVpnGatewaysGenerateVpnProfileFuture struct {
25628	azure.Future
25629}
25630
25631// Result returns the result of the asynchronous operation.
25632// If the operation has not completed it will return an error.
25633func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
25634	var done bool
25635	done, err = future.DoneWithContext(context.Background(), client)
25636	if err != nil {
25637		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
25638		return
25639	}
25640	if !done {
25641		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
25642		return
25643	}
25644	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25645	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
25646		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
25647		if err != nil {
25648			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
25649		}
25650	}
25651	return
25652}
25653
25654// P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture an abstraction for monitoring and retrieving the
25655// results of a long-running operation.
25656type P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture struct {
25657	azure.Future
25658}
25659
25660// Result returns the result of the asynchronous operation.
25661// If the operation has not completed it will return an error.
25662func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture) Result(client P2sVpnGatewaysClient) (pvch P2SVpnConnectionHealth, err error) {
25663	var done bool
25664	done, err = future.DoneWithContext(context.Background(), client)
25665	if err != nil {
25666		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", future.Response(), "Polling failure")
25667		return
25668	}
25669	if !done {
25670		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture")
25671		return
25672	}
25673	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25674	if pvch.Response.Response, err = future.GetResult(sender); err == nil && pvch.Response.Response.StatusCode != http.StatusNoContent {
25675		pvch, err = client.GetP2sVpnConnectionHealthDetailedResponder(pvch.Response.Response)
25676		if err != nil {
25677			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", pvch.Response.Response, "Failure responding to request")
25678		}
25679	}
25680	return
25681}
25682
25683// P2sVpnGatewaysGetP2sVpnConnectionHealthFuture an abstraction for monitoring and retrieving the results
25684// of a long-running operation.
25685type P2sVpnGatewaysGetP2sVpnConnectionHealthFuture struct {
25686	azure.Future
25687}
25688
25689// Result returns the result of the asynchronous operation.
25690// If the operation has not completed it will return an error.
25691func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
25692	var done bool
25693	done, err = future.DoneWithContext(context.Background(), client)
25694	if err != nil {
25695		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", future.Response(), "Polling failure")
25696		return
25697	}
25698	if !done {
25699		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture")
25700		return
25701	}
25702	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25703	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
25704		pvg, err = client.GetP2sVpnConnectionHealthResponder(pvg.Response.Response)
25705		if err != nil {
25706			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", pvg.Response.Response, "Failure responding to request")
25707		}
25708	}
25709	return
25710}
25711
25712// P2SVpnProfileParameters vpn Client Parameters for package generation.
25713type P2SVpnProfileParameters struct {
25714	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
25715	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
25716}
25717
25718// PacketCapture parameters that define the create packet capture operation.
25719type PacketCapture struct {
25720	// PacketCaptureParameters - Properties of the packet capture.
25721	*PacketCaptureParameters `json:"properties,omitempty"`
25722}
25723
25724// MarshalJSON is the custom marshaler for PacketCapture.
25725func (pc PacketCapture) MarshalJSON() ([]byte, error) {
25726	objectMap := make(map[string]interface{})
25727	if pc.PacketCaptureParameters != nil {
25728		objectMap["properties"] = pc.PacketCaptureParameters
25729	}
25730	return json.Marshal(objectMap)
25731}
25732
25733// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
25734func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
25735	var m map[string]*json.RawMessage
25736	err := json.Unmarshal(body, &m)
25737	if err != nil {
25738		return err
25739	}
25740	for k, v := range m {
25741		switch k {
25742		case "properties":
25743			if v != nil {
25744				var packetCaptureParameters PacketCaptureParameters
25745				err = json.Unmarshal(*v, &packetCaptureParameters)
25746				if err != nil {
25747					return err
25748				}
25749				pc.PacketCaptureParameters = &packetCaptureParameters
25750			}
25751		}
25752	}
25753
25754	return nil
25755}
25756
25757// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
25758type PacketCaptureFilter struct {
25759	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
25760	Protocol PcProtocol `json:"protocol,omitempty"`
25761	// LocalIPAddress - Local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5"? for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
25762	LocalIPAddress *string `json:"localIPAddress,omitempty"`
25763	// RemoteIPAddress - Local IP Address to be filtered on. Notation: "127.0.0.1" for single address entry. "127.0.0.1-127.0.0.255" for range. "127.0.0.1;127.0.0.5;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
25764	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
25765	// LocalPort - Local port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
25766	LocalPort *string `json:"localPort,omitempty"`
25767	// RemotePort - Remote port to be filtered on. Notation: "80" for single port entry."80-85" for range. "80;443;" for multiple entries. Multiple ranges not currently supported. Mixing ranges with multiple entries not currently supported. Default = null.
25768	RemotePort *string `json:"remotePort,omitempty"`
25769}
25770
25771// PacketCaptureListResult list of packet capture sessions.
25772type PacketCaptureListResult struct {
25773	autorest.Response `json:"-"`
25774	// Value - Information about packet capture sessions.
25775	Value *[]PacketCaptureResult `json:"value,omitempty"`
25776}
25777
25778// PacketCaptureParameters parameters that define the create packet capture operation.
25779type PacketCaptureParameters struct {
25780	// Target - The ID of the targeted resource, only VM is currently supported.
25781	Target *string `json:"target,omitempty"`
25782	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
25783	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
25784	// TotalBytesPerSession - Maximum size of the capture output.
25785	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
25786	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
25787	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
25788	// StorageLocation - The storage location for a packet capture session.
25789	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
25790	// Filters - A list of packet capture filters.
25791	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
25792}
25793
25794// PacketCaptureQueryStatusResult status of packet capture session.
25795type PacketCaptureQueryStatusResult struct {
25796	autorest.Response `json:"-"`
25797	// Name - The name of the packet capture resource.
25798	Name *string `json:"name,omitempty"`
25799	// ID - The ID of the packet capture resource.
25800	ID *string `json:"id,omitempty"`
25801	// CaptureStartTime - The start time of the packet capture session.
25802	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
25803	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
25804	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
25805	// StopReason - The reason the current packet capture session was stopped.
25806	StopReason *string `json:"stopReason,omitempty"`
25807	// PacketCaptureError - List of errors of packet capture session.
25808	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
25809}
25810
25811// PacketCaptureResult information about packet capture session.
25812type PacketCaptureResult struct {
25813	autorest.Response `json:"-"`
25814	// Name - READ-ONLY; Name of the packet capture session.
25815	Name *string `json:"name,omitempty"`
25816	// ID - READ-ONLY; ID of the packet capture operation.
25817	ID *string `json:"id,omitempty"`
25818	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25819	Etag *string `json:"etag,omitempty"`
25820	// PacketCaptureResultProperties - Properties of the packet capture result.
25821	*PacketCaptureResultProperties `json:"properties,omitempty"`
25822}
25823
25824// MarshalJSON is the custom marshaler for PacketCaptureResult.
25825func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
25826	objectMap := make(map[string]interface{})
25827	if pcr.PacketCaptureResultProperties != nil {
25828		objectMap["properties"] = pcr.PacketCaptureResultProperties
25829	}
25830	return json.Marshal(objectMap)
25831}
25832
25833// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
25834func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
25835	var m map[string]*json.RawMessage
25836	err := json.Unmarshal(body, &m)
25837	if err != nil {
25838		return err
25839	}
25840	for k, v := range m {
25841		switch k {
25842		case "name":
25843			if v != nil {
25844				var name string
25845				err = json.Unmarshal(*v, &name)
25846				if err != nil {
25847					return err
25848				}
25849				pcr.Name = &name
25850			}
25851		case "id":
25852			if v != nil {
25853				var ID string
25854				err = json.Unmarshal(*v, &ID)
25855				if err != nil {
25856					return err
25857				}
25858				pcr.ID = &ID
25859			}
25860		case "etag":
25861			if v != nil {
25862				var etag string
25863				err = json.Unmarshal(*v, &etag)
25864				if err != nil {
25865					return err
25866				}
25867				pcr.Etag = &etag
25868			}
25869		case "properties":
25870			if v != nil {
25871				var packetCaptureResultProperties PacketCaptureResultProperties
25872				err = json.Unmarshal(*v, &packetCaptureResultProperties)
25873				if err != nil {
25874					return err
25875				}
25876				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
25877			}
25878		}
25879	}
25880
25881	return nil
25882}
25883
25884// PacketCaptureResultProperties the properties of a packet capture session.
25885type PacketCaptureResultProperties struct {
25886	// ProvisioningState - READ-ONLY; The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25887	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25888	// Target - The ID of the targeted resource, only VM is currently supported.
25889	Target *string `json:"target,omitempty"`
25890	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
25891	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
25892	// TotalBytesPerSession - Maximum size of the capture output.
25893	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
25894	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
25895	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
25896	// StorageLocation - The storage location for a packet capture session.
25897	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
25898	// Filters - A list of packet capture filters.
25899	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
25900}
25901
25902// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
25903// operation.
25904type PacketCapturesCreateFuture struct {
25905	azure.Future
25906}
25907
25908// Result returns the result of the asynchronous operation.
25909// If the operation has not completed it will return an error.
25910func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
25911	var done bool
25912	done, err = future.DoneWithContext(context.Background(), client)
25913	if err != nil {
25914		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
25915		return
25916	}
25917	if !done {
25918		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
25919		return
25920	}
25921	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25922	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
25923		pcr, err = client.CreateResponder(pcr.Response.Response)
25924		if err != nil {
25925			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
25926		}
25927	}
25928	return
25929}
25930
25931// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25932// operation.
25933type PacketCapturesDeleteFuture struct {
25934	azure.Future
25935}
25936
25937// Result returns the result of the asynchronous operation.
25938// If the operation has not completed it will return an error.
25939func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
25940	var done bool
25941	done, err = future.DoneWithContext(context.Background(), client)
25942	if err != nil {
25943		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
25944		return
25945	}
25946	if !done {
25947		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
25948		return
25949	}
25950	ar.Response = future.Response()
25951	return
25952}
25953
25954// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
25955// operation.
25956type PacketCapturesGetStatusFuture struct {
25957	azure.Future
25958}
25959
25960// Result returns the result of the asynchronous operation.
25961// If the operation has not completed it will return an error.
25962func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
25963	var done bool
25964	done, err = future.DoneWithContext(context.Background(), client)
25965	if err != nil {
25966		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
25967		return
25968	}
25969	if !done {
25970		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
25971		return
25972	}
25973	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25974	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
25975		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
25976		if err != nil {
25977			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
25978		}
25979	}
25980	return
25981}
25982
25983// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
25984// operation.
25985type PacketCapturesStopFuture struct {
25986	azure.Future
25987}
25988
25989// Result returns the result of the asynchronous operation.
25990// If the operation has not completed it will return an error.
25991func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
25992	var done bool
25993	done, err = future.DoneWithContext(context.Background(), client)
25994	if err != nil {
25995		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
25996		return
25997	}
25998	if !done {
25999		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
26000		return
26001	}
26002	ar.Response = future.Response()
26003	return
26004}
26005
26006// PacketCaptureStorageLocation the storage location for a packet capture session.
26007type PacketCaptureStorageLocation struct {
26008	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
26009	StorageID *string `json:"storageId,omitempty"`
26010	// StoragePath - The URI of the storage path to save the packet capture. Must be a well-formed URI describing the location to save the packet capture.
26011	StoragePath *string `json:"storagePath,omitempty"`
26012	// FilePath - A valid local path on the targeting VM. Must include the name of the capture file (*.cap). For linux virtual machine it must start with /var/captures. Required if no storage ID is provided, otherwise optional.
26013	FilePath *string `json:"filePath,omitempty"`
26014}
26015
26016// PatchRouteFilter route Filter Resource.
26017type PatchRouteFilter struct {
26018	// RouteFilterPropertiesFormat - Properties of the route filter.
26019	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
26020	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
26021	Name *string `json:"name,omitempty"`
26022	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26023	Etag *string `json:"etag,omitempty"`
26024	// Type - READ-ONLY; Resource type.
26025	Type *string `json:"type,omitempty"`
26026	// Tags - Resource tags.
26027	Tags map[string]*string `json:"tags"`
26028	// ID - Resource ID.
26029	ID *string `json:"id,omitempty"`
26030}
26031
26032// MarshalJSON is the custom marshaler for PatchRouteFilter.
26033func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
26034	objectMap := make(map[string]interface{})
26035	if prf.RouteFilterPropertiesFormat != nil {
26036		objectMap["properties"] = prf.RouteFilterPropertiesFormat
26037	}
26038	if prf.Tags != nil {
26039		objectMap["tags"] = prf.Tags
26040	}
26041	if prf.ID != nil {
26042		objectMap["id"] = prf.ID
26043	}
26044	return json.Marshal(objectMap)
26045}
26046
26047// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
26048func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
26049	var m map[string]*json.RawMessage
26050	err := json.Unmarshal(body, &m)
26051	if err != nil {
26052		return err
26053	}
26054	for k, v := range m {
26055		switch k {
26056		case "properties":
26057			if v != nil {
26058				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
26059				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
26060				if err != nil {
26061					return err
26062				}
26063				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
26064			}
26065		case "name":
26066			if v != nil {
26067				var name string
26068				err = json.Unmarshal(*v, &name)
26069				if err != nil {
26070					return err
26071				}
26072				prf.Name = &name
26073			}
26074		case "etag":
26075			if v != nil {
26076				var etag string
26077				err = json.Unmarshal(*v, &etag)
26078				if err != nil {
26079					return err
26080				}
26081				prf.Etag = &etag
26082			}
26083		case "type":
26084			if v != nil {
26085				var typeVar string
26086				err = json.Unmarshal(*v, &typeVar)
26087				if err != nil {
26088					return err
26089				}
26090				prf.Type = &typeVar
26091			}
26092		case "tags":
26093			if v != nil {
26094				var tags map[string]*string
26095				err = json.Unmarshal(*v, &tags)
26096				if err != nil {
26097					return err
26098				}
26099				prf.Tags = tags
26100			}
26101		case "id":
26102			if v != nil {
26103				var ID string
26104				err = json.Unmarshal(*v, &ID)
26105				if err != nil {
26106					return err
26107				}
26108				prf.ID = &ID
26109			}
26110		}
26111	}
26112
26113	return nil
26114}
26115
26116// PatchRouteFilterRule route Filter Rule Resource.
26117type PatchRouteFilterRule struct {
26118	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
26119	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
26120	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
26121	Name *string `json:"name,omitempty"`
26122	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26123	Etag *string `json:"etag,omitempty"`
26124	// ID - Resource ID.
26125	ID *string `json:"id,omitempty"`
26126}
26127
26128// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
26129func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
26130	objectMap := make(map[string]interface{})
26131	if prfr.RouteFilterRulePropertiesFormat != nil {
26132		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
26133	}
26134	if prfr.ID != nil {
26135		objectMap["id"] = prfr.ID
26136	}
26137	return json.Marshal(objectMap)
26138}
26139
26140// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
26141func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
26142	var m map[string]*json.RawMessage
26143	err := json.Unmarshal(body, &m)
26144	if err != nil {
26145		return err
26146	}
26147	for k, v := range m {
26148		switch k {
26149		case "properties":
26150			if v != nil {
26151				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
26152				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
26153				if err != nil {
26154					return err
26155				}
26156				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
26157			}
26158		case "name":
26159			if v != nil {
26160				var name string
26161				err = json.Unmarshal(*v, &name)
26162				if err != nil {
26163					return err
26164				}
26165				prfr.Name = &name
26166			}
26167		case "etag":
26168			if v != nil {
26169				var etag string
26170				err = json.Unmarshal(*v, &etag)
26171				if err != nil {
26172					return err
26173				}
26174				prfr.Etag = &etag
26175			}
26176		case "id":
26177			if v != nil {
26178				var ID string
26179				err = json.Unmarshal(*v, &ID)
26180				if err != nil {
26181					return err
26182				}
26183				prfr.ID = &ID
26184			}
26185		}
26186	}
26187
26188	return nil
26189}
26190
26191// PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
26192// resource.
26193type PeerExpressRouteCircuitConnection struct {
26194	autorest.Response `json:"-"`
26195	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
26196	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
26197	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26198	Name *string `json:"name,omitempty"`
26199	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26200	Etag *string `json:"etag,omitempty"`
26201	// Type - READ-ONLY; Type of the resource.
26202	Type *string `json:"type,omitempty"`
26203	// ID - Resource ID.
26204	ID *string `json:"id,omitempty"`
26205}
26206
26207// MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
26208func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
26209	objectMap := make(map[string]interface{})
26210	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
26211		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
26212	}
26213	if percc.Name != nil {
26214		objectMap["name"] = percc.Name
26215	}
26216	if percc.ID != nil {
26217		objectMap["id"] = percc.ID
26218	}
26219	return json.Marshal(objectMap)
26220}
26221
26222// UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
26223func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
26224	var m map[string]*json.RawMessage
26225	err := json.Unmarshal(body, &m)
26226	if err != nil {
26227		return err
26228	}
26229	for k, v := range m {
26230		switch k {
26231		case "properties":
26232			if v != nil {
26233				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
26234				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
26235				if err != nil {
26236					return err
26237				}
26238				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
26239			}
26240		case "name":
26241			if v != nil {
26242				var name string
26243				err = json.Unmarshal(*v, &name)
26244				if err != nil {
26245					return err
26246				}
26247				percc.Name = &name
26248			}
26249		case "etag":
26250			if v != nil {
26251				var etag string
26252				err = json.Unmarshal(*v, &etag)
26253				if err != nil {
26254					return err
26255				}
26256				percc.Etag = &etag
26257			}
26258		case "type":
26259			if v != nil {
26260				var typeVar string
26261				err = json.Unmarshal(*v, &typeVar)
26262				if err != nil {
26263					return err
26264				}
26265				percc.Type = &typeVar
26266			}
26267		case "id":
26268			if v != nil {
26269				var ID string
26270				err = json.Unmarshal(*v, &ID)
26271				if err != nil {
26272					return err
26273				}
26274				percc.ID = &ID
26275			}
26276		}
26277	}
26278
26279	return nil
26280}
26281
26282// PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
26283// retrieves all global reach peer circuit connections that belongs to a Private Peering for an
26284// ExpressRouteCircuit.
26285type PeerExpressRouteCircuitConnectionListResult struct {
26286	autorest.Response `json:"-"`
26287	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
26288	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
26289	// NextLink - The URL to get the next set of results.
26290	NextLink *string `json:"nextLink,omitempty"`
26291}
26292
26293// PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
26294// PeerExpressRouteCircuitConnection values.
26295type PeerExpressRouteCircuitConnectionListResultIterator struct {
26296	i    int
26297	page PeerExpressRouteCircuitConnectionListResultPage
26298}
26299
26300// NextWithContext advances to the next value.  If there was an error making
26301// the request the iterator does not advance and the error is returned.
26302func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
26303	if tracing.IsEnabled() {
26304		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
26305		defer func() {
26306			sc := -1
26307			if iter.Response().Response.Response != nil {
26308				sc = iter.Response().Response.Response.StatusCode
26309			}
26310			tracing.EndSpan(ctx, sc, err)
26311		}()
26312	}
26313	iter.i++
26314	if iter.i < len(iter.page.Values()) {
26315		return nil
26316	}
26317	err = iter.page.NextWithContext(ctx)
26318	if err != nil {
26319		iter.i--
26320		return err
26321	}
26322	iter.i = 0
26323	return nil
26324}
26325
26326// Next advances to the next value.  If there was an error making
26327// the request the iterator does not advance and the error is returned.
26328// Deprecated: Use NextWithContext() instead.
26329func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
26330	return iter.NextWithContext(context.Background())
26331}
26332
26333// NotDone returns true if the enumeration should be started or is not yet complete.
26334func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
26335	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26336}
26337
26338// Response returns the raw server response from the last page request.
26339func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
26340	return iter.page.Response()
26341}
26342
26343// Value returns the current value or a zero-initialized value if the
26344// iterator has advanced beyond the end of the collection.
26345func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
26346	if !iter.page.NotDone() {
26347		return PeerExpressRouteCircuitConnection{}
26348	}
26349	return iter.page.Values()[iter.i]
26350}
26351
26352// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
26353func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
26354	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
26355}
26356
26357// IsEmpty returns true if the ListResult contains no values.
26358func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
26359	return percclr.Value == nil || len(*percclr.Value) == 0
26360}
26361
26362// peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
26363// It returns nil if no more results exist.
26364func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
26365	if percclr.NextLink == nil || len(to.String(percclr.NextLink)) < 1 {
26366		return nil, nil
26367	}
26368	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26369		autorest.AsJSON(),
26370		autorest.AsGet(),
26371		autorest.WithBaseURL(to.String(percclr.NextLink)))
26372}
26373
26374// PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
26375// values.
26376type PeerExpressRouteCircuitConnectionListResultPage struct {
26377	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
26378	percclr PeerExpressRouteCircuitConnectionListResult
26379}
26380
26381// NextWithContext advances to the next page of values.  If there was an error making
26382// the request the page does not advance and the error is returned.
26383func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
26384	if tracing.IsEnabled() {
26385		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
26386		defer func() {
26387			sc := -1
26388			if page.Response().Response.Response != nil {
26389				sc = page.Response().Response.Response.StatusCode
26390			}
26391			tracing.EndSpan(ctx, sc, err)
26392		}()
26393	}
26394	next, err := page.fn(ctx, page.percclr)
26395	if err != nil {
26396		return err
26397	}
26398	page.percclr = next
26399	return nil
26400}
26401
26402// Next advances to the next page of values.  If there was an error making
26403// the request the page does not advance and the error is returned.
26404// Deprecated: Use NextWithContext() instead.
26405func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
26406	return page.NextWithContext(context.Background())
26407}
26408
26409// NotDone returns true if the page enumeration should be started or is not yet complete.
26410func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
26411	return !page.percclr.IsEmpty()
26412}
26413
26414// Response returns the raw server response from the last page request.
26415func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
26416	return page.percclr
26417}
26418
26419// Values returns the slice of values for the current page or nil if there are no values.
26420func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
26421	if page.percclr.IsEmpty() {
26422		return nil
26423	}
26424	return *page.percclr.Value
26425}
26426
26427// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
26428func NewPeerExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
26429	return PeerExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
26430}
26431
26432// PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
26433// connection.
26434type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
26435	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
26436	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
26437	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
26438	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
26439	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
26440	AddressPrefix *string `json:"addressPrefix,omitempty"`
26441	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
26442	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
26443	// ConnectionName - The name of the express route circuit connection resource.
26444	ConnectionName *string `json:"connectionName,omitempty"`
26445	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
26446	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
26447	// ProvisioningState - READ-ONLY; The provisioning state of the peer express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26448	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26449}
26450
26451// PolicySettings defines contents of a web application firewall global configuration.
26452type PolicySettings struct {
26453	// State - The state of the policy. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
26454	State WebApplicationFirewallEnabledState `json:"state,omitempty"`
26455	// Mode - The mode of the policy. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
26456	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
26457	// RequestBodyCheck - Whether to allow WAF to check request Body.
26458	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
26459	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
26460	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
26461	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
26462	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
26463}
26464
26465// PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
26466type PrepareNetworkPoliciesRequest struct {
26467	// ServiceName - The name of the service for which subnet is being prepared for.
26468	ServiceName *string `json:"serviceName,omitempty"`
26469	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
26470	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
26471}
26472
26473// PrivateDNSZoneConfig privateDnsZoneConfig resource.
26474type PrivateDNSZoneConfig struct {
26475	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
26476	Name *string `json:"name,omitempty"`
26477	// PrivateDNSZonePropertiesFormat - Properties of the private dns zone configuration.
26478	*PrivateDNSZonePropertiesFormat `json:"properties,omitempty"`
26479}
26480
26481// MarshalJSON is the custom marshaler for PrivateDNSZoneConfig.
26482func (pdzc PrivateDNSZoneConfig) MarshalJSON() ([]byte, error) {
26483	objectMap := make(map[string]interface{})
26484	if pdzc.Name != nil {
26485		objectMap["name"] = pdzc.Name
26486	}
26487	if pdzc.PrivateDNSZonePropertiesFormat != nil {
26488		objectMap["properties"] = pdzc.PrivateDNSZonePropertiesFormat
26489	}
26490	return json.Marshal(objectMap)
26491}
26492
26493// UnmarshalJSON is the custom unmarshaler for PrivateDNSZoneConfig struct.
26494func (pdzc *PrivateDNSZoneConfig) UnmarshalJSON(body []byte) error {
26495	var m map[string]*json.RawMessage
26496	err := json.Unmarshal(body, &m)
26497	if err != nil {
26498		return err
26499	}
26500	for k, v := range m {
26501		switch k {
26502		case "name":
26503			if v != nil {
26504				var name string
26505				err = json.Unmarshal(*v, &name)
26506				if err != nil {
26507					return err
26508				}
26509				pdzc.Name = &name
26510			}
26511		case "properties":
26512			if v != nil {
26513				var privateDNSZonePropertiesFormat PrivateDNSZonePropertiesFormat
26514				err = json.Unmarshal(*v, &privateDNSZonePropertiesFormat)
26515				if err != nil {
26516					return err
26517				}
26518				pdzc.PrivateDNSZonePropertiesFormat = &privateDNSZonePropertiesFormat
26519			}
26520		}
26521	}
26522
26523	return nil
26524}
26525
26526// PrivateDNSZoneGroup private dns zone group resource.
26527type PrivateDNSZoneGroup struct {
26528	autorest.Response `json:"-"`
26529	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
26530	Name *string `json:"name,omitempty"`
26531	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26532	Etag *string `json:"etag,omitempty"`
26533	// PrivateDNSZoneGroupPropertiesFormat - Properties of the private dns zone group.
26534	*PrivateDNSZoneGroupPropertiesFormat `json:"properties,omitempty"`
26535	// ID - Resource ID.
26536	ID *string `json:"id,omitempty"`
26537}
26538
26539// MarshalJSON is the custom marshaler for PrivateDNSZoneGroup.
26540func (pdzg PrivateDNSZoneGroup) MarshalJSON() ([]byte, error) {
26541	objectMap := make(map[string]interface{})
26542	if pdzg.Name != nil {
26543		objectMap["name"] = pdzg.Name
26544	}
26545	if pdzg.PrivateDNSZoneGroupPropertiesFormat != nil {
26546		objectMap["properties"] = pdzg.PrivateDNSZoneGroupPropertiesFormat
26547	}
26548	if pdzg.ID != nil {
26549		objectMap["id"] = pdzg.ID
26550	}
26551	return json.Marshal(objectMap)
26552}
26553
26554// UnmarshalJSON is the custom unmarshaler for PrivateDNSZoneGroup struct.
26555func (pdzg *PrivateDNSZoneGroup) UnmarshalJSON(body []byte) error {
26556	var m map[string]*json.RawMessage
26557	err := json.Unmarshal(body, &m)
26558	if err != nil {
26559		return err
26560	}
26561	for k, v := range m {
26562		switch k {
26563		case "name":
26564			if v != nil {
26565				var name string
26566				err = json.Unmarshal(*v, &name)
26567				if err != nil {
26568					return err
26569				}
26570				pdzg.Name = &name
26571			}
26572		case "etag":
26573			if v != nil {
26574				var etag string
26575				err = json.Unmarshal(*v, &etag)
26576				if err != nil {
26577					return err
26578				}
26579				pdzg.Etag = &etag
26580			}
26581		case "properties":
26582			if v != nil {
26583				var privateDNSZoneGroupPropertiesFormat PrivateDNSZoneGroupPropertiesFormat
26584				err = json.Unmarshal(*v, &privateDNSZoneGroupPropertiesFormat)
26585				if err != nil {
26586					return err
26587				}
26588				pdzg.PrivateDNSZoneGroupPropertiesFormat = &privateDNSZoneGroupPropertiesFormat
26589			}
26590		case "id":
26591			if v != nil {
26592				var ID string
26593				err = json.Unmarshal(*v, &ID)
26594				if err != nil {
26595					return err
26596				}
26597				pdzg.ID = &ID
26598			}
26599		}
26600	}
26601
26602	return nil
26603}
26604
26605// PrivateDNSZoneGroupListResult response for the ListPrivateDnsZoneGroups API service call.
26606type PrivateDNSZoneGroupListResult struct {
26607	autorest.Response `json:"-"`
26608	// Value - A list of private dns zone group resources in a private endpoint.
26609	Value *[]PrivateDNSZoneGroup `json:"value,omitempty"`
26610	// NextLink - READ-ONLY; The URL to get the next set of results.
26611	NextLink *string `json:"nextLink,omitempty"`
26612}
26613
26614// PrivateDNSZoneGroupListResultIterator provides access to a complete listing of PrivateDNSZoneGroup
26615// values.
26616type PrivateDNSZoneGroupListResultIterator struct {
26617	i    int
26618	page PrivateDNSZoneGroupListResultPage
26619}
26620
26621// NextWithContext advances to the next value.  If there was an error making
26622// the request the iterator does not advance and the error is returned.
26623func (iter *PrivateDNSZoneGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
26624	if tracing.IsEnabled() {
26625		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateDNSZoneGroupListResultIterator.NextWithContext")
26626		defer func() {
26627			sc := -1
26628			if iter.Response().Response.Response != nil {
26629				sc = iter.Response().Response.Response.StatusCode
26630			}
26631			tracing.EndSpan(ctx, sc, err)
26632		}()
26633	}
26634	iter.i++
26635	if iter.i < len(iter.page.Values()) {
26636		return nil
26637	}
26638	err = iter.page.NextWithContext(ctx)
26639	if err != nil {
26640		iter.i--
26641		return err
26642	}
26643	iter.i = 0
26644	return nil
26645}
26646
26647// Next advances to the next value.  If there was an error making
26648// the request the iterator does not advance and the error is returned.
26649// Deprecated: Use NextWithContext() instead.
26650func (iter *PrivateDNSZoneGroupListResultIterator) Next() error {
26651	return iter.NextWithContext(context.Background())
26652}
26653
26654// NotDone returns true if the enumeration should be started or is not yet complete.
26655func (iter PrivateDNSZoneGroupListResultIterator) NotDone() bool {
26656	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26657}
26658
26659// Response returns the raw server response from the last page request.
26660func (iter PrivateDNSZoneGroupListResultIterator) Response() PrivateDNSZoneGroupListResult {
26661	return iter.page.Response()
26662}
26663
26664// Value returns the current value or a zero-initialized value if the
26665// iterator has advanced beyond the end of the collection.
26666func (iter PrivateDNSZoneGroupListResultIterator) Value() PrivateDNSZoneGroup {
26667	if !iter.page.NotDone() {
26668		return PrivateDNSZoneGroup{}
26669	}
26670	return iter.page.Values()[iter.i]
26671}
26672
26673// Creates a new instance of the PrivateDNSZoneGroupListResultIterator type.
26674func NewPrivateDNSZoneGroupListResultIterator(page PrivateDNSZoneGroupListResultPage) PrivateDNSZoneGroupListResultIterator {
26675	return PrivateDNSZoneGroupListResultIterator{page: page}
26676}
26677
26678// IsEmpty returns true if the ListResult contains no values.
26679func (pdzglr PrivateDNSZoneGroupListResult) IsEmpty() bool {
26680	return pdzglr.Value == nil || len(*pdzglr.Value) == 0
26681}
26682
26683// privateDNSZoneGroupListResultPreparer prepares a request to retrieve the next set of results.
26684// It returns nil if no more results exist.
26685func (pdzglr PrivateDNSZoneGroupListResult) privateDNSZoneGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
26686	if pdzglr.NextLink == nil || len(to.String(pdzglr.NextLink)) < 1 {
26687		return nil, nil
26688	}
26689	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26690		autorest.AsJSON(),
26691		autorest.AsGet(),
26692		autorest.WithBaseURL(to.String(pdzglr.NextLink)))
26693}
26694
26695// PrivateDNSZoneGroupListResultPage contains a page of PrivateDNSZoneGroup values.
26696type PrivateDNSZoneGroupListResultPage struct {
26697	fn     func(context.Context, PrivateDNSZoneGroupListResult) (PrivateDNSZoneGroupListResult, error)
26698	pdzglr PrivateDNSZoneGroupListResult
26699}
26700
26701// NextWithContext advances to the next page of values.  If there was an error making
26702// the request the page does not advance and the error is returned.
26703func (page *PrivateDNSZoneGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
26704	if tracing.IsEnabled() {
26705		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateDNSZoneGroupListResultPage.NextWithContext")
26706		defer func() {
26707			sc := -1
26708			if page.Response().Response.Response != nil {
26709				sc = page.Response().Response.Response.StatusCode
26710			}
26711			tracing.EndSpan(ctx, sc, err)
26712		}()
26713	}
26714	next, err := page.fn(ctx, page.pdzglr)
26715	if err != nil {
26716		return err
26717	}
26718	page.pdzglr = next
26719	return nil
26720}
26721
26722// Next advances to the next page of values.  If there was an error making
26723// the request the page does not advance and the error is returned.
26724// Deprecated: Use NextWithContext() instead.
26725func (page *PrivateDNSZoneGroupListResultPage) Next() error {
26726	return page.NextWithContext(context.Background())
26727}
26728
26729// NotDone returns true if the page enumeration should be started or is not yet complete.
26730func (page PrivateDNSZoneGroupListResultPage) NotDone() bool {
26731	return !page.pdzglr.IsEmpty()
26732}
26733
26734// Response returns the raw server response from the last page request.
26735func (page PrivateDNSZoneGroupListResultPage) Response() PrivateDNSZoneGroupListResult {
26736	return page.pdzglr
26737}
26738
26739// Values returns the slice of values for the current page or nil if there are no values.
26740func (page PrivateDNSZoneGroupListResultPage) Values() []PrivateDNSZoneGroup {
26741	if page.pdzglr.IsEmpty() {
26742		return nil
26743	}
26744	return *page.pdzglr.Value
26745}
26746
26747// Creates a new instance of the PrivateDNSZoneGroupListResultPage type.
26748func NewPrivateDNSZoneGroupListResultPage(getNextPage func(context.Context, PrivateDNSZoneGroupListResult) (PrivateDNSZoneGroupListResult, error)) PrivateDNSZoneGroupListResultPage {
26749	return PrivateDNSZoneGroupListResultPage{fn: getNextPage}
26750}
26751
26752// PrivateDNSZoneGroupPropertiesFormat properties of the private dns zone group.
26753type PrivateDNSZoneGroupPropertiesFormat struct {
26754	// ProvisioningState - READ-ONLY; The provisioning state of the private dns zone group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26755	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26756	// PrivateDNSZoneConfigs - A collection of private dns zone configurations of the private dns zone group.
26757	PrivateDNSZoneConfigs *[]PrivateDNSZoneConfig `json:"privateDnsZoneConfigs,omitempty"`
26758}
26759
26760// PrivateDNSZoneGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26761// long-running operation.
26762type PrivateDNSZoneGroupsCreateOrUpdateFuture struct {
26763	azure.Future
26764}
26765
26766// Result returns the result of the asynchronous operation.
26767// If the operation has not completed it will return an error.
26768func (future *PrivateDNSZoneGroupsCreateOrUpdateFuture) Result(client PrivateDNSZoneGroupsClient) (pdzg PrivateDNSZoneGroup, err error) {
26769	var done bool
26770	done, err = future.DoneWithContext(context.Background(), client)
26771	if err != nil {
26772		err = autorest.NewErrorWithError(err, "network.PrivateDNSZoneGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26773		return
26774	}
26775	if !done {
26776		err = azure.NewAsyncOpIncompleteError("network.PrivateDNSZoneGroupsCreateOrUpdateFuture")
26777		return
26778	}
26779	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26780	if pdzg.Response.Response, err = future.GetResult(sender); err == nil && pdzg.Response.Response.StatusCode != http.StatusNoContent {
26781		pdzg, err = client.CreateOrUpdateResponder(pdzg.Response.Response)
26782		if err != nil {
26783			err = autorest.NewErrorWithError(err, "network.PrivateDNSZoneGroupsCreateOrUpdateFuture", "Result", pdzg.Response.Response, "Failure responding to request")
26784		}
26785	}
26786	return
26787}
26788
26789// PrivateDNSZoneGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
26790// long-running operation.
26791type PrivateDNSZoneGroupsDeleteFuture struct {
26792	azure.Future
26793}
26794
26795// Result returns the result of the asynchronous operation.
26796// If the operation has not completed it will return an error.
26797func (future *PrivateDNSZoneGroupsDeleteFuture) Result(client PrivateDNSZoneGroupsClient) (ar autorest.Response, err error) {
26798	var done bool
26799	done, err = future.DoneWithContext(context.Background(), client)
26800	if err != nil {
26801		err = autorest.NewErrorWithError(err, "network.PrivateDNSZoneGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
26802		return
26803	}
26804	if !done {
26805		err = azure.NewAsyncOpIncompleteError("network.PrivateDNSZoneGroupsDeleteFuture")
26806		return
26807	}
26808	ar.Response = future.Response()
26809	return
26810}
26811
26812// PrivateDNSZonePropertiesFormat properties of the private dns zone configuration resource.
26813type PrivateDNSZonePropertiesFormat struct {
26814	// PrivateDNSZoneID - The resource id of the private dns zone.
26815	PrivateDNSZoneID *string `json:"privateDnsZoneId,omitempty"`
26816	// RecordSets - READ-ONLY; A collection of information regarding a recordSet, holding information to identify private resources.
26817	RecordSets *[]RecordSet `json:"recordSets,omitempty"`
26818}
26819
26820// PrivateEndpoint private endpoint resource.
26821type PrivateEndpoint struct {
26822	autorest.Response `json:"-"`
26823	// PrivateEndpointProperties - Properties of the private endpoint.
26824	*PrivateEndpointProperties `json:"properties,omitempty"`
26825	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26826	Etag *string `json:"etag,omitempty"`
26827	// ID - Resource ID.
26828	ID *string `json:"id,omitempty"`
26829	// Name - READ-ONLY; Resource name.
26830	Name *string `json:"name,omitempty"`
26831	// Type - READ-ONLY; Resource type.
26832	Type *string `json:"type,omitempty"`
26833	// Location - Resource location.
26834	Location *string `json:"location,omitempty"`
26835	// Tags - Resource tags.
26836	Tags map[string]*string `json:"tags"`
26837}
26838
26839// MarshalJSON is the custom marshaler for PrivateEndpoint.
26840func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) {
26841	objectMap := make(map[string]interface{})
26842	if peVar.PrivateEndpointProperties != nil {
26843		objectMap["properties"] = peVar.PrivateEndpointProperties
26844	}
26845	if peVar.ID != nil {
26846		objectMap["id"] = peVar.ID
26847	}
26848	if peVar.Location != nil {
26849		objectMap["location"] = peVar.Location
26850	}
26851	if peVar.Tags != nil {
26852		objectMap["tags"] = peVar.Tags
26853	}
26854	return json.Marshal(objectMap)
26855}
26856
26857// UnmarshalJSON is the custom unmarshaler for PrivateEndpoint struct.
26858func (peVar *PrivateEndpoint) UnmarshalJSON(body []byte) error {
26859	var m map[string]*json.RawMessage
26860	err := json.Unmarshal(body, &m)
26861	if err != nil {
26862		return err
26863	}
26864	for k, v := range m {
26865		switch k {
26866		case "properties":
26867			if v != nil {
26868				var privateEndpointProperties PrivateEndpointProperties
26869				err = json.Unmarshal(*v, &privateEndpointProperties)
26870				if err != nil {
26871					return err
26872				}
26873				peVar.PrivateEndpointProperties = &privateEndpointProperties
26874			}
26875		case "etag":
26876			if v != nil {
26877				var etag string
26878				err = json.Unmarshal(*v, &etag)
26879				if err != nil {
26880					return err
26881				}
26882				peVar.Etag = &etag
26883			}
26884		case "id":
26885			if v != nil {
26886				var ID string
26887				err = json.Unmarshal(*v, &ID)
26888				if err != nil {
26889					return err
26890				}
26891				peVar.ID = &ID
26892			}
26893		case "name":
26894			if v != nil {
26895				var name string
26896				err = json.Unmarshal(*v, &name)
26897				if err != nil {
26898					return err
26899				}
26900				peVar.Name = &name
26901			}
26902		case "type":
26903			if v != nil {
26904				var typeVar string
26905				err = json.Unmarshal(*v, &typeVar)
26906				if err != nil {
26907					return err
26908				}
26909				peVar.Type = &typeVar
26910			}
26911		case "location":
26912			if v != nil {
26913				var location string
26914				err = json.Unmarshal(*v, &location)
26915				if err != nil {
26916					return err
26917				}
26918				peVar.Location = &location
26919			}
26920		case "tags":
26921			if v != nil {
26922				var tags map[string]*string
26923				err = json.Unmarshal(*v, &tags)
26924				if err != nil {
26925					return err
26926				}
26927				peVar.Tags = tags
26928			}
26929		}
26930	}
26931
26932	return nil
26933}
26934
26935// PrivateEndpointConnection privateEndpointConnection resource.
26936type PrivateEndpointConnection struct {
26937	autorest.Response `json:"-"`
26938	// PrivateEndpointConnectionProperties - Properties of the private end point connection.
26939	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
26940	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26941	Name *string `json:"name,omitempty"`
26942	// Type - READ-ONLY; The resource type.
26943	Type *string `json:"type,omitempty"`
26944	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
26945	Etag *string `json:"etag,omitempty"`
26946	// ID - Resource ID.
26947	ID *string `json:"id,omitempty"`
26948}
26949
26950// MarshalJSON is the custom marshaler for PrivateEndpointConnection.
26951func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
26952	objectMap := make(map[string]interface{})
26953	if pec.PrivateEndpointConnectionProperties != nil {
26954		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
26955	}
26956	if pec.Name != nil {
26957		objectMap["name"] = pec.Name
26958	}
26959	if pec.ID != nil {
26960		objectMap["id"] = pec.ID
26961	}
26962	return json.Marshal(objectMap)
26963}
26964
26965// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
26966func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
26967	var m map[string]*json.RawMessage
26968	err := json.Unmarshal(body, &m)
26969	if err != nil {
26970		return err
26971	}
26972	for k, v := range m {
26973		switch k {
26974		case "properties":
26975			if v != nil {
26976				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
26977				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
26978				if err != nil {
26979					return err
26980				}
26981				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
26982			}
26983		case "name":
26984			if v != nil {
26985				var name string
26986				err = json.Unmarshal(*v, &name)
26987				if err != nil {
26988					return err
26989				}
26990				pec.Name = &name
26991			}
26992		case "type":
26993			if v != nil {
26994				var typeVar string
26995				err = json.Unmarshal(*v, &typeVar)
26996				if err != nil {
26997					return err
26998				}
26999				pec.Type = &typeVar
27000			}
27001		case "etag":
27002			if v != nil {
27003				var etag string
27004				err = json.Unmarshal(*v, &etag)
27005				if err != nil {
27006					return err
27007				}
27008				pec.Etag = &etag
27009			}
27010		case "id":
27011			if v != nil {
27012				var ID string
27013				err = json.Unmarshal(*v, &ID)
27014				if err != nil {
27015					return err
27016				}
27017				pec.ID = &ID
27018			}
27019		}
27020	}
27021
27022	return nil
27023}
27024
27025// PrivateEndpointConnectionListResult response for the ListPrivateEndpointConnection API service call.
27026type PrivateEndpointConnectionListResult struct {
27027	autorest.Response `json:"-"`
27028	// Value - A list of PrivateEndpointConnection resources for a specific private link service.
27029	Value *[]PrivateEndpointConnection `json:"value,omitempty"`
27030	// NextLink - READ-ONLY; The URL to get the next set of results.
27031	NextLink *string `json:"nextLink,omitempty"`
27032}
27033
27034// PrivateEndpointConnectionListResultIterator provides access to a complete listing of
27035// PrivateEndpointConnection values.
27036type PrivateEndpointConnectionListResultIterator struct {
27037	i    int
27038	page PrivateEndpointConnectionListResultPage
27039}
27040
27041// NextWithContext advances to the next value.  If there was an error making
27042// the request the iterator does not advance and the error is returned.
27043func (iter *PrivateEndpointConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
27044	if tracing.IsEnabled() {
27045		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultIterator.NextWithContext")
27046		defer func() {
27047			sc := -1
27048			if iter.Response().Response.Response != nil {
27049				sc = iter.Response().Response.Response.StatusCode
27050			}
27051			tracing.EndSpan(ctx, sc, err)
27052		}()
27053	}
27054	iter.i++
27055	if iter.i < len(iter.page.Values()) {
27056		return nil
27057	}
27058	err = iter.page.NextWithContext(ctx)
27059	if err != nil {
27060		iter.i--
27061		return err
27062	}
27063	iter.i = 0
27064	return nil
27065}
27066
27067// Next advances to the next value.  If there was an error making
27068// the request the iterator does not advance and the error is returned.
27069// Deprecated: Use NextWithContext() instead.
27070func (iter *PrivateEndpointConnectionListResultIterator) Next() error {
27071	return iter.NextWithContext(context.Background())
27072}
27073
27074// NotDone returns true if the enumeration should be started or is not yet complete.
27075func (iter PrivateEndpointConnectionListResultIterator) NotDone() bool {
27076	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27077}
27078
27079// Response returns the raw server response from the last page request.
27080func (iter PrivateEndpointConnectionListResultIterator) Response() PrivateEndpointConnectionListResult {
27081	return iter.page.Response()
27082}
27083
27084// Value returns the current value or a zero-initialized value if the
27085// iterator has advanced beyond the end of the collection.
27086func (iter PrivateEndpointConnectionListResultIterator) Value() PrivateEndpointConnection {
27087	if !iter.page.NotDone() {
27088		return PrivateEndpointConnection{}
27089	}
27090	return iter.page.Values()[iter.i]
27091}
27092
27093// Creates a new instance of the PrivateEndpointConnectionListResultIterator type.
27094func NewPrivateEndpointConnectionListResultIterator(page PrivateEndpointConnectionListResultPage) PrivateEndpointConnectionListResultIterator {
27095	return PrivateEndpointConnectionListResultIterator{page: page}
27096}
27097
27098// IsEmpty returns true if the ListResult contains no values.
27099func (peclr PrivateEndpointConnectionListResult) IsEmpty() bool {
27100	return peclr.Value == nil || len(*peclr.Value) == 0
27101}
27102
27103// privateEndpointConnectionListResultPreparer prepares a request to retrieve the next set of results.
27104// It returns nil if no more results exist.
27105func (peclr PrivateEndpointConnectionListResult) privateEndpointConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
27106	if peclr.NextLink == nil || len(to.String(peclr.NextLink)) < 1 {
27107		return nil, nil
27108	}
27109	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27110		autorest.AsJSON(),
27111		autorest.AsGet(),
27112		autorest.WithBaseURL(to.String(peclr.NextLink)))
27113}
27114
27115// PrivateEndpointConnectionListResultPage contains a page of PrivateEndpointConnection values.
27116type PrivateEndpointConnectionListResultPage struct {
27117	fn    func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)
27118	peclr PrivateEndpointConnectionListResult
27119}
27120
27121// NextWithContext advances to the next page of values.  If there was an error making
27122// the request the page does not advance and the error is returned.
27123func (page *PrivateEndpointConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
27124	if tracing.IsEnabled() {
27125		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultPage.NextWithContext")
27126		defer func() {
27127			sc := -1
27128			if page.Response().Response.Response != nil {
27129				sc = page.Response().Response.Response.StatusCode
27130			}
27131			tracing.EndSpan(ctx, sc, err)
27132		}()
27133	}
27134	next, err := page.fn(ctx, page.peclr)
27135	if err != nil {
27136		return err
27137	}
27138	page.peclr = next
27139	return nil
27140}
27141
27142// Next advances to the next page of values.  If there was an error making
27143// the request the page does not advance and the error is returned.
27144// Deprecated: Use NextWithContext() instead.
27145func (page *PrivateEndpointConnectionListResultPage) Next() error {
27146	return page.NextWithContext(context.Background())
27147}
27148
27149// NotDone returns true if the page enumeration should be started or is not yet complete.
27150func (page PrivateEndpointConnectionListResultPage) NotDone() bool {
27151	return !page.peclr.IsEmpty()
27152}
27153
27154// Response returns the raw server response from the last page request.
27155func (page PrivateEndpointConnectionListResultPage) Response() PrivateEndpointConnectionListResult {
27156	return page.peclr
27157}
27158
27159// Values returns the slice of values for the current page or nil if there are no values.
27160func (page PrivateEndpointConnectionListResultPage) Values() []PrivateEndpointConnection {
27161	if page.peclr.IsEmpty() {
27162		return nil
27163	}
27164	return *page.peclr.Value
27165}
27166
27167// Creates a new instance of the PrivateEndpointConnectionListResultPage type.
27168func NewPrivateEndpointConnectionListResultPage(getNextPage func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)) PrivateEndpointConnectionListResultPage {
27169	return PrivateEndpointConnectionListResultPage{fn: getNextPage}
27170}
27171
27172// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties.
27173type PrivateEndpointConnectionProperties struct {
27174	// PrivateEndpoint - READ-ONLY; The resource of private end point.
27175	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
27176	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
27177	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
27178	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27179	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27180	// LinkIdentifier - READ-ONLY; The consumer link id.
27181	LinkIdentifier *string `json:"linkIdentifier,omitempty"`
27182}
27183
27184// PrivateEndpointListResult response for the ListPrivateEndpoints API service call.
27185type PrivateEndpointListResult struct {
27186	autorest.Response `json:"-"`
27187	// Value - A list of private endpoint resources in a resource group.
27188	Value *[]PrivateEndpoint `json:"value,omitempty"`
27189	// NextLink - READ-ONLY; The URL to get the next set of results.
27190	NextLink *string `json:"nextLink,omitempty"`
27191}
27192
27193// PrivateEndpointListResultIterator provides access to a complete listing of PrivateEndpoint values.
27194type PrivateEndpointListResultIterator struct {
27195	i    int
27196	page PrivateEndpointListResultPage
27197}
27198
27199// NextWithContext advances to the next value.  If there was an error making
27200// the request the iterator does not advance and the error is returned.
27201func (iter *PrivateEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
27202	if tracing.IsEnabled() {
27203		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultIterator.NextWithContext")
27204		defer func() {
27205			sc := -1
27206			if iter.Response().Response.Response != nil {
27207				sc = iter.Response().Response.Response.StatusCode
27208			}
27209			tracing.EndSpan(ctx, sc, err)
27210		}()
27211	}
27212	iter.i++
27213	if iter.i < len(iter.page.Values()) {
27214		return nil
27215	}
27216	err = iter.page.NextWithContext(ctx)
27217	if err != nil {
27218		iter.i--
27219		return err
27220	}
27221	iter.i = 0
27222	return nil
27223}
27224
27225// Next advances to the next value.  If there was an error making
27226// the request the iterator does not advance and the error is returned.
27227// Deprecated: Use NextWithContext() instead.
27228func (iter *PrivateEndpointListResultIterator) Next() error {
27229	return iter.NextWithContext(context.Background())
27230}
27231
27232// NotDone returns true if the enumeration should be started or is not yet complete.
27233func (iter PrivateEndpointListResultIterator) NotDone() bool {
27234	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27235}
27236
27237// Response returns the raw server response from the last page request.
27238func (iter PrivateEndpointListResultIterator) Response() PrivateEndpointListResult {
27239	return iter.page.Response()
27240}
27241
27242// Value returns the current value or a zero-initialized value if the
27243// iterator has advanced beyond the end of the collection.
27244func (iter PrivateEndpointListResultIterator) Value() PrivateEndpoint {
27245	if !iter.page.NotDone() {
27246		return PrivateEndpoint{}
27247	}
27248	return iter.page.Values()[iter.i]
27249}
27250
27251// Creates a new instance of the PrivateEndpointListResultIterator type.
27252func NewPrivateEndpointListResultIterator(page PrivateEndpointListResultPage) PrivateEndpointListResultIterator {
27253	return PrivateEndpointListResultIterator{page: page}
27254}
27255
27256// IsEmpty returns true if the ListResult contains no values.
27257func (pelr PrivateEndpointListResult) IsEmpty() bool {
27258	return pelr.Value == nil || len(*pelr.Value) == 0
27259}
27260
27261// privateEndpointListResultPreparer prepares a request to retrieve the next set of results.
27262// It returns nil if no more results exist.
27263func (pelr PrivateEndpointListResult) privateEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
27264	if pelr.NextLink == nil || len(to.String(pelr.NextLink)) < 1 {
27265		return nil, nil
27266	}
27267	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27268		autorest.AsJSON(),
27269		autorest.AsGet(),
27270		autorest.WithBaseURL(to.String(pelr.NextLink)))
27271}
27272
27273// PrivateEndpointListResultPage contains a page of PrivateEndpoint values.
27274type PrivateEndpointListResultPage struct {
27275	fn   func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)
27276	pelr PrivateEndpointListResult
27277}
27278
27279// NextWithContext advances to the next page of values.  If there was an error making
27280// the request the page does not advance and the error is returned.
27281func (page *PrivateEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
27282	if tracing.IsEnabled() {
27283		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultPage.NextWithContext")
27284		defer func() {
27285			sc := -1
27286			if page.Response().Response.Response != nil {
27287				sc = page.Response().Response.Response.StatusCode
27288			}
27289			tracing.EndSpan(ctx, sc, err)
27290		}()
27291	}
27292	next, err := page.fn(ctx, page.pelr)
27293	if err != nil {
27294		return err
27295	}
27296	page.pelr = next
27297	return nil
27298}
27299
27300// Next advances to the next page of values.  If there was an error making
27301// the request the page does not advance and the error is returned.
27302// Deprecated: Use NextWithContext() instead.
27303func (page *PrivateEndpointListResultPage) Next() error {
27304	return page.NextWithContext(context.Background())
27305}
27306
27307// NotDone returns true if the page enumeration should be started or is not yet complete.
27308func (page PrivateEndpointListResultPage) NotDone() bool {
27309	return !page.pelr.IsEmpty()
27310}
27311
27312// Response returns the raw server response from the last page request.
27313func (page PrivateEndpointListResultPage) Response() PrivateEndpointListResult {
27314	return page.pelr
27315}
27316
27317// Values returns the slice of values for the current page or nil if there are no values.
27318func (page PrivateEndpointListResultPage) Values() []PrivateEndpoint {
27319	if page.pelr.IsEmpty() {
27320		return nil
27321	}
27322	return *page.pelr.Value
27323}
27324
27325// Creates a new instance of the PrivateEndpointListResultPage type.
27326func NewPrivateEndpointListResultPage(getNextPage func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)) PrivateEndpointListResultPage {
27327	return PrivateEndpointListResultPage{fn: getNextPage}
27328}
27329
27330// PrivateEndpointProperties properties of the private endpoint.
27331type PrivateEndpointProperties struct {
27332	// Subnet - The ID of the subnet from which the private IP will be allocated.
27333	Subnet *Subnet `json:"subnet,omitempty"`
27334	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private endpoint.
27335	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
27336	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27337	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27338	// PrivateLinkServiceConnections - A grouping of information about the connection to the remote resource.
27339	PrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"privateLinkServiceConnections,omitempty"`
27340	// ManualPrivateLinkServiceConnections - A grouping of information about the connection to the remote resource. Used when the network admin does not have access to approve connections to the remote resource.
27341	ManualPrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"manualPrivateLinkServiceConnections,omitempty"`
27342	// CustomDNSConfigs - An array of custom dns configurations.
27343	CustomDNSConfigs *[]CustomDNSConfigPropertiesFormat `json:"customDnsConfigs,omitempty"`
27344}
27345
27346// PrivateEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27347// long-running operation.
27348type PrivateEndpointsCreateOrUpdateFuture struct {
27349	azure.Future
27350}
27351
27352// Result returns the result of the asynchronous operation.
27353// If the operation has not completed it will return an error.
27354func (future *PrivateEndpointsCreateOrUpdateFuture) Result(client PrivateEndpointsClient) (peVar PrivateEndpoint, err error) {
27355	var done bool
27356	done, err = future.DoneWithContext(context.Background(), client)
27357	if err != nil {
27358		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27359		return
27360	}
27361	if !done {
27362		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsCreateOrUpdateFuture")
27363		return
27364	}
27365	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27366	if peVar.Response.Response, err = future.GetResult(sender); err == nil && peVar.Response.Response.StatusCode != http.StatusNoContent {
27367		peVar, err = client.CreateOrUpdateResponder(peVar.Response.Response)
27368		if err != nil {
27369			err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", peVar.Response.Response, "Failure responding to request")
27370		}
27371	}
27372	return
27373}
27374
27375// PrivateEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27376// operation.
27377type PrivateEndpointsDeleteFuture struct {
27378	azure.Future
27379}
27380
27381// Result returns the result of the asynchronous operation.
27382// If the operation has not completed it will return an error.
27383func (future *PrivateEndpointsDeleteFuture) Result(client PrivateEndpointsClient) (ar autorest.Response, err error) {
27384	var done bool
27385	done, err = future.DoneWithContext(context.Background(), client)
27386	if err != nil {
27387		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
27388		return
27389	}
27390	if !done {
27391		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsDeleteFuture")
27392		return
27393	}
27394	ar.Response = future.Response()
27395	return
27396}
27397
27398// PrivateLinkService private link service resource.
27399type PrivateLinkService struct {
27400	autorest.Response `json:"-"`
27401	// PrivateLinkServiceProperties - Properties of the private link service.
27402	*PrivateLinkServiceProperties `json:"properties,omitempty"`
27403	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27404	Etag *string `json:"etag,omitempty"`
27405	// ID - Resource ID.
27406	ID *string `json:"id,omitempty"`
27407	// Name - READ-ONLY; Resource name.
27408	Name *string `json:"name,omitempty"`
27409	// Type - READ-ONLY; Resource type.
27410	Type *string `json:"type,omitempty"`
27411	// Location - Resource location.
27412	Location *string `json:"location,omitempty"`
27413	// Tags - Resource tags.
27414	Tags map[string]*string `json:"tags"`
27415}
27416
27417// MarshalJSON is the custom marshaler for PrivateLinkService.
27418func (pls PrivateLinkService) MarshalJSON() ([]byte, error) {
27419	objectMap := make(map[string]interface{})
27420	if pls.PrivateLinkServiceProperties != nil {
27421		objectMap["properties"] = pls.PrivateLinkServiceProperties
27422	}
27423	if pls.ID != nil {
27424		objectMap["id"] = pls.ID
27425	}
27426	if pls.Location != nil {
27427		objectMap["location"] = pls.Location
27428	}
27429	if pls.Tags != nil {
27430		objectMap["tags"] = pls.Tags
27431	}
27432	return json.Marshal(objectMap)
27433}
27434
27435// UnmarshalJSON is the custom unmarshaler for PrivateLinkService struct.
27436func (pls *PrivateLinkService) UnmarshalJSON(body []byte) error {
27437	var m map[string]*json.RawMessage
27438	err := json.Unmarshal(body, &m)
27439	if err != nil {
27440		return err
27441	}
27442	for k, v := range m {
27443		switch k {
27444		case "properties":
27445			if v != nil {
27446				var privateLinkServiceProperties PrivateLinkServiceProperties
27447				err = json.Unmarshal(*v, &privateLinkServiceProperties)
27448				if err != nil {
27449					return err
27450				}
27451				pls.PrivateLinkServiceProperties = &privateLinkServiceProperties
27452			}
27453		case "etag":
27454			if v != nil {
27455				var etag string
27456				err = json.Unmarshal(*v, &etag)
27457				if err != nil {
27458					return err
27459				}
27460				pls.Etag = &etag
27461			}
27462		case "id":
27463			if v != nil {
27464				var ID string
27465				err = json.Unmarshal(*v, &ID)
27466				if err != nil {
27467					return err
27468				}
27469				pls.ID = &ID
27470			}
27471		case "name":
27472			if v != nil {
27473				var name string
27474				err = json.Unmarshal(*v, &name)
27475				if err != nil {
27476					return err
27477				}
27478				pls.Name = &name
27479			}
27480		case "type":
27481			if v != nil {
27482				var typeVar string
27483				err = json.Unmarshal(*v, &typeVar)
27484				if err != nil {
27485					return err
27486				}
27487				pls.Type = &typeVar
27488			}
27489		case "location":
27490			if v != nil {
27491				var location string
27492				err = json.Unmarshal(*v, &location)
27493				if err != nil {
27494					return err
27495				}
27496				pls.Location = &location
27497			}
27498		case "tags":
27499			if v != nil {
27500				var tags map[string]*string
27501				err = json.Unmarshal(*v, &tags)
27502				if err != nil {
27503					return err
27504				}
27505				pls.Tags = tags
27506			}
27507		}
27508	}
27509
27510	return nil
27511}
27512
27513// PrivateLinkServiceConnection privateLinkServiceConnection resource.
27514type PrivateLinkServiceConnection struct {
27515	// PrivateLinkServiceConnectionProperties - Properties of the private link service connection.
27516	*PrivateLinkServiceConnectionProperties `json:"properties,omitempty"`
27517	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27518	Name *string `json:"name,omitempty"`
27519	// Type - READ-ONLY; The resource type.
27520	Type *string `json:"type,omitempty"`
27521	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27522	Etag *string `json:"etag,omitempty"`
27523	// ID - Resource ID.
27524	ID *string `json:"id,omitempty"`
27525}
27526
27527// MarshalJSON is the custom marshaler for PrivateLinkServiceConnection.
27528func (plsc PrivateLinkServiceConnection) MarshalJSON() ([]byte, error) {
27529	objectMap := make(map[string]interface{})
27530	if plsc.PrivateLinkServiceConnectionProperties != nil {
27531		objectMap["properties"] = plsc.PrivateLinkServiceConnectionProperties
27532	}
27533	if plsc.Name != nil {
27534		objectMap["name"] = plsc.Name
27535	}
27536	if plsc.ID != nil {
27537		objectMap["id"] = plsc.ID
27538	}
27539	return json.Marshal(objectMap)
27540}
27541
27542// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceConnection struct.
27543func (plsc *PrivateLinkServiceConnection) UnmarshalJSON(body []byte) error {
27544	var m map[string]*json.RawMessage
27545	err := json.Unmarshal(body, &m)
27546	if err != nil {
27547		return err
27548	}
27549	for k, v := range m {
27550		switch k {
27551		case "properties":
27552			if v != nil {
27553				var privateLinkServiceConnectionProperties PrivateLinkServiceConnectionProperties
27554				err = json.Unmarshal(*v, &privateLinkServiceConnectionProperties)
27555				if err != nil {
27556					return err
27557				}
27558				plsc.PrivateLinkServiceConnectionProperties = &privateLinkServiceConnectionProperties
27559			}
27560		case "name":
27561			if v != nil {
27562				var name string
27563				err = json.Unmarshal(*v, &name)
27564				if err != nil {
27565					return err
27566				}
27567				plsc.Name = &name
27568			}
27569		case "type":
27570			if v != nil {
27571				var typeVar string
27572				err = json.Unmarshal(*v, &typeVar)
27573				if err != nil {
27574					return err
27575				}
27576				plsc.Type = &typeVar
27577			}
27578		case "etag":
27579			if v != nil {
27580				var etag string
27581				err = json.Unmarshal(*v, &etag)
27582				if err != nil {
27583					return err
27584				}
27585				plsc.Etag = &etag
27586			}
27587		case "id":
27588			if v != nil {
27589				var ID string
27590				err = json.Unmarshal(*v, &ID)
27591				if err != nil {
27592					return err
27593				}
27594				plsc.ID = &ID
27595			}
27596		}
27597	}
27598
27599	return nil
27600}
27601
27602// PrivateLinkServiceConnectionProperties properties of the PrivateLinkServiceConnection.
27603type PrivateLinkServiceConnectionProperties struct {
27604	// ProvisioningState - READ-ONLY; The provisioning state of the private link service connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27605	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27606	// PrivateLinkServiceID - The resource id of private link service.
27607	PrivateLinkServiceID *string `json:"privateLinkServiceId,omitempty"`
27608	// GroupIds - The ID(s) of the group(s) obtained from the remote resource that this private endpoint should connect to.
27609	GroupIds *[]string `json:"groupIds,omitempty"`
27610	// RequestMessage - A message passed to the owner of the remote resource with this connection request. Restricted to 140 chars.
27611	RequestMessage *string `json:"requestMessage,omitempty"`
27612	// PrivateLinkServiceConnectionState - A collection of read-only information about the state of the connection to the remote resource.
27613	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
27614}
27615
27616// PrivateLinkServiceConnectionState a collection of information about the state of the connection between
27617// service consumer and provider.
27618type PrivateLinkServiceConnectionState struct {
27619	// Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.
27620	Status *string `json:"status,omitempty"`
27621	// Description - The reason for approval/rejection of the connection.
27622	Description *string `json:"description,omitempty"`
27623	// ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer.
27624	ActionsRequired *string `json:"actionsRequired,omitempty"`
27625}
27626
27627// PrivateLinkServiceIPConfiguration the private link service ip configuration.
27628type PrivateLinkServiceIPConfiguration struct {
27629	// PrivateLinkServiceIPConfigurationProperties - Properties of the private link service ip configuration.
27630	*PrivateLinkServiceIPConfigurationProperties `json:"properties,omitempty"`
27631	// Name - The name of private link service ip configuration.
27632	Name *string `json:"name,omitempty"`
27633	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27634	Etag *string `json:"etag,omitempty"`
27635	// Type - READ-ONLY; The resource type.
27636	Type *string `json:"type,omitempty"`
27637	// ID - Resource ID.
27638	ID *string `json:"id,omitempty"`
27639}
27640
27641// MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfiguration.
27642func (plsic PrivateLinkServiceIPConfiguration) MarshalJSON() ([]byte, error) {
27643	objectMap := make(map[string]interface{})
27644	if plsic.PrivateLinkServiceIPConfigurationProperties != nil {
27645		objectMap["properties"] = plsic.PrivateLinkServiceIPConfigurationProperties
27646	}
27647	if plsic.Name != nil {
27648		objectMap["name"] = plsic.Name
27649	}
27650	if plsic.ID != nil {
27651		objectMap["id"] = plsic.ID
27652	}
27653	return json.Marshal(objectMap)
27654}
27655
27656// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceIPConfiguration struct.
27657func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error {
27658	var m map[string]*json.RawMessage
27659	err := json.Unmarshal(body, &m)
27660	if err != nil {
27661		return err
27662	}
27663	for k, v := range m {
27664		switch k {
27665		case "properties":
27666			if v != nil {
27667				var privateLinkServiceIPConfigurationProperties PrivateLinkServiceIPConfigurationProperties
27668				err = json.Unmarshal(*v, &privateLinkServiceIPConfigurationProperties)
27669				if err != nil {
27670					return err
27671				}
27672				plsic.PrivateLinkServiceIPConfigurationProperties = &privateLinkServiceIPConfigurationProperties
27673			}
27674		case "name":
27675			if v != nil {
27676				var name string
27677				err = json.Unmarshal(*v, &name)
27678				if err != nil {
27679					return err
27680				}
27681				plsic.Name = &name
27682			}
27683		case "etag":
27684			if v != nil {
27685				var etag string
27686				err = json.Unmarshal(*v, &etag)
27687				if err != nil {
27688					return err
27689				}
27690				plsic.Etag = &etag
27691			}
27692		case "type":
27693			if v != nil {
27694				var typeVar string
27695				err = json.Unmarshal(*v, &typeVar)
27696				if err != nil {
27697					return err
27698				}
27699				plsic.Type = &typeVar
27700			}
27701		case "id":
27702			if v != nil {
27703				var ID string
27704				err = json.Unmarshal(*v, &ID)
27705				if err != nil {
27706					return err
27707				}
27708				plsic.ID = &ID
27709			}
27710		}
27711	}
27712
27713	return nil
27714}
27715
27716// PrivateLinkServiceIPConfigurationProperties properties of private link service IP configuration.
27717type PrivateLinkServiceIPConfigurationProperties struct {
27718	// PrivateIPAddress - The private IP address of the IP configuration.
27719	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
27720	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
27721	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
27722	// Subnet - The reference to the subnet resource.
27723	Subnet *Subnet `json:"subnet,omitempty"`
27724	// Primary - Whether the ip configuration is primary or not.
27725	Primary *bool `json:"primary,omitempty"`
27726	// ProvisioningState - READ-ONLY; The provisioning state of the private link service IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27727	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27728	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
27729	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
27730}
27731
27732// PrivateLinkServiceListResult response for the ListPrivateLinkService API service call.
27733type PrivateLinkServiceListResult struct {
27734	autorest.Response `json:"-"`
27735	// Value - A list of PrivateLinkService resources in a resource group.
27736	Value *[]PrivateLinkService `json:"value,omitempty"`
27737	// NextLink - READ-ONLY; The URL to get the next set of results.
27738	NextLink *string `json:"nextLink,omitempty"`
27739}
27740
27741// PrivateLinkServiceListResultIterator provides access to a complete listing of PrivateLinkService values.
27742type PrivateLinkServiceListResultIterator struct {
27743	i    int
27744	page PrivateLinkServiceListResultPage
27745}
27746
27747// NextWithContext advances to the next value.  If there was an error making
27748// the request the iterator does not advance and the error is returned.
27749func (iter *PrivateLinkServiceListResultIterator) NextWithContext(ctx context.Context) (err error) {
27750	if tracing.IsEnabled() {
27751		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultIterator.NextWithContext")
27752		defer func() {
27753			sc := -1
27754			if iter.Response().Response.Response != nil {
27755				sc = iter.Response().Response.Response.StatusCode
27756			}
27757			tracing.EndSpan(ctx, sc, err)
27758		}()
27759	}
27760	iter.i++
27761	if iter.i < len(iter.page.Values()) {
27762		return nil
27763	}
27764	err = iter.page.NextWithContext(ctx)
27765	if err != nil {
27766		iter.i--
27767		return err
27768	}
27769	iter.i = 0
27770	return nil
27771}
27772
27773// Next advances to the next value.  If there was an error making
27774// the request the iterator does not advance and the error is returned.
27775// Deprecated: Use NextWithContext() instead.
27776func (iter *PrivateLinkServiceListResultIterator) Next() error {
27777	return iter.NextWithContext(context.Background())
27778}
27779
27780// NotDone returns true if the enumeration should be started or is not yet complete.
27781func (iter PrivateLinkServiceListResultIterator) NotDone() bool {
27782	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27783}
27784
27785// Response returns the raw server response from the last page request.
27786func (iter PrivateLinkServiceListResultIterator) Response() PrivateLinkServiceListResult {
27787	return iter.page.Response()
27788}
27789
27790// Value returns the current value or a zero-initialized value if the
27791// iterator has advanced beyond the end of the collection.
27792func (iter PrivateLinkServiceListResultIterator) Value() PrivateLinkService {
27793	if !iter.page.NotDone() {
27794		return PrivateLinkService{}
27795	}
27796	return iter.page.Values()[iter.i]
27797}
27798
27799// Creates a new instance of the PrivateLinkServiceListResultIterator type.
27800func NewPrivateLinkServiceListResultIterator(page PrivateLinkServiceListResultPage) PrivateLinkServiceListResultIterator {
27801	return PrivateLinkServiceListResultIterator{page: page}
27802}
27803
27804// IsEmpty returns true if the ListResult contains no values.
27805func (plslr PrivateLinkServiceListResult) IsEmpty() bool {
27806	return plslr.Value == nil || len(*plslr.Value) == 0
27807}
27808
27809// privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results.
27810// It returns nil if no more results exist.
27811func (plslr PrivateLinkServiceListResult) privateLinkServiceListResultPreparer(ctx context.Context) (*http.Request, error) {
27812	if plslr.NextLink == nil || len(to.String(plslr.NextLink)) < 1 {
27813		return nil, nil
27814	}
27815	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27816		autorest.AsJSON(),
27817		autorest.AsGet(),
27818		autorest.WithBaseURL(to.String(plslr.NextLink)))
27819}
27820
27821// PrivateLinkServiceListResultPage contains a page of PrivateLinkService values.
27822type PrivateLinkServiceListResultPage struct {
27823	fn    func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)
27824	plslr PrivateLinkServiceListResult
27825}
27826
27827// NextWithContext advances to the next page of values.  If there was an error making
27828// the request the page does not advance and the error is returned.
27829func (page *PrivateLinkServiceListResultPage) NextWithContext(ctx context.Context) (err error) {
27830	if tracing.IsEnabled() {
27831		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultPage.NextWithContext")
27832		defer func() {
27833			sc := -1
27834			if page.Response().Response.Response != nil {
27835				sc = page.Response().Response.Response.StatusCode
27836			}
27837			tracing.EndSpan(ctx, sc, err)
27838		}()
27839	}
27840	next, err := page.fn(ctx, page.plslr)
27841	if err != nil {
27842		return err
27843	}
27844	page.plslr = next
27845	return nil
27846}
27847
27848// Next advances to the next page of values.  If there was an error making
27849// the request the page does not advance and the error is returned.
27850// Deprecated: Use NextWithContext() instead.
27851func (page *PrivateLinkServiceListResultPage) Next() error {
27852	return page.NextWithContext(context.Background())
27853}
27854
27855// NotDone returns true if the page enumeration should be started or is not yet complete.
27856func (page PrivateLinkServiceListResultPage) NotDone() bool {
27857	return !page.plslr.IsEmpty()
27858}
27859
27860// Response returns the raw server response from the last page request.
27861func (page PrivateLinkServiceListResultPage) Response() PrivateLinkServiceListResult {
27862	return page.plslr
27863}
27864
27865// Values returns the slice of values for the current page or nil if there are no values.
27866func (page PrivateLinkServiceListResultPage) Values() []PrivateLinkService {
27867	if page.plslr.IsEmpty() {
27868		return nil
27869	}
27870	return *page.plslr.Value
27871}
27872
27873// Creates a new instance of the PrivateLinkServiceListResultPage type.
27874func NewPrivateLinkServiceListResultPage(getNextPage func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)) PrivateLinkServiceListResultPage {
27875	return PrivateLinkServiceListResultPage{fn: getNextPage}
27876}
27877
27878// PrivateLinkServiceProperties properties of the private link service.
27879type PrivateLinkServiceProperties struct {
27880	// LoadBalancerFrontendIPConfigurations - An array of references to the load balancer IP configurations.
27881	LoadBalancerFrontendIPConfigurations *[]FrontendIPConfiguration `json:"loadBalancerFrontendIpConfigurations,omitempty"`
27882	// IPConfigurations - An array of private link service IP configurations.
27883	IPConfigurations *[]PrivateLinkServiceIPConfiguration `json:"ipConfigurations,omitempty"`
27884	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private link service.
27885	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
27886	// ProvisioningState - READ-ONLY; The provisioning state of the private link service resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27887	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27888	// PrivateEndpointConnections - READ-ONLY; An array of list about connections to the private endpoint.
27889	PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
27890	// Visibility - The visibility list of the private link service.
27891	Visibility *PrivateLinkServicePropertiesVisibility `json:"visibility,omitempty"`
27892	// AutoApproval - The auto-approval list of the private link service.
27893	AutoApproval *PrivateLinkServicePropertiesAutoApproval `json:"autoApproval,omitempty"`
27894	// Fqdns - The list of Fqdn.
27895	Fqdns *[]string `json:"fqdns,omitempty"`
27896	// Alias - READ-ONLY; The alias of the private link service.
27897	Alias *string `json:"alias,omitempty"`
27898	// EnableProxyProtocol - Whether the private link service is enabled for proxy protocol or not.
27899	EnableProxyProtocol *bool `json:"enableProxyProtocol,omitempty"`
27900}
27901
27902// PrivateLinkServicePropertiesAutoApproval the auto-approval list of the private link service.
27903type PrivateLinkServicePropertiesAutoApproval struct {
27904	// Subscriptions - The list of subscriptions.
27905	Subscriptions *[]string `json:"subscriptions,omitempty"`
27906}
27907
27908// PrivateLinkServicePropertiesVisibility the visibility list of the private link service.
27909type PrivateLinkServicePropertiesVisibility struct {
27910	// Subscriptions - The list of subscriptions.
27911	Subscriptions *[]string `json:"subscriptions,omitempty"`
27912}
27913
27914// PrivateLinkServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27915// long-running operation.
27916type PrivateLinkServicesCreateOrUpdateFuture struct {
27917	azure.Future
27918}
27919
27920// Result returns the result of the asynchronous operation.
27921// If the operation has not completed it will return an error.
27922func (future *PrivateLinkServicesCreateOrUpdateFuture) Result(client PrivateLinkServicesClient) (pls PrivateLinkService, err error) {
27923	var done bool
27924	done, err = future.DoneWithContext(context.Background(), client)
27925	if err != nil {
27926		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27927		return
27928	}
27929	if !done {
27930		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCreateOrUpdateFuture")
27931		return
27932	}
27933	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27934	if pls.Response.Response, err = future.GetResult(sender); err == nil && pls.Response.Response.StatusCode != http.StatusNoContent {
27935		pls, err = client.CreateOrUpdateResponder(pls.Response.Response)
27936		if err != nil {
27937			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", pls.Response.Response, "Failure responding to request")
27938		}
27939	}
27940	return
27941}
27942
27943// PrivateLinkServicesDeleteFuture an abstraction for monitoring and retrieving the results of a
27944// long-running operation.
27945type PrivateLinkServicesDeleteFuture struct {
27946	azure.Future
27947}
27948
27949// Result returns the result of the asynchronous operation.
27950// If the operation has not completed it will return an error.
27951func (future *PrivateLinkServicesDeleteFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
27952	var done bool
27953	done, err = future.DoneWithContext(context.Background(), client)
27954	if err != nil {
27955		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeleteFuture", "Result", future.Response(), "Polling failure")
27956		return
27957	}
27958	if !done {
27959		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeleteFuture")
27960		return
27961	}
27962	ar.Response = future.Response()
27963	return
27964}
27965
27966// PrivateLinkServicesDeletePrivateEndpointConnectionFuture an abstraction for monitoring and retrieving
27967// the results of a long-running operation.
27968type PrivateLinkServicesDeletePrivateEndpointConnectionFuture struct {
27969	azure.Future
27970}
27971
27972// Result returns the result of the asynchronous operation.
27973// If the operation has not completed it will return an error.
27974func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
27975	var done bool
27976	done, err = future.DoneWithContext(context.Background(), client)
27977	if err != nil {
27978		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure")
27979		return
27980	}
27981	if !done {
27982		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture")
27983		return
27984	}
27985	ar.Response = future.Response()
27986	return
27987}
27988
27989// PrivateLinkServiceVisibility response for the CheckPrivateLinkServiceVisibility API service call.
27990type PrivateLinkServiceVisibility struct {
27991	autorest.Response `json:"-"`
27992	// Visible - Private Link Service Visibility (True/False).
27993	Visible *bool `json:"visible,omitempty"`
27994}
27995
27996// Probe a load balancer probe.
27997type Probe struct {
27998	autorest.Response `json:"-"`
27999	// ProbePropertiesFormat - Properties of load balancer probe.
28000	*ProbePropertiesFormat `json:"properties,omitempty"`
28001	// Name - The name of the resource that is unique within the set of probes used by the load balancer. This name can be used to access the resource.
28002	Name *string `json:"name,omitempty"`
28003	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28004	Etag *string `json:"etag,omitempty"`
28005	// Type - READ-ONLY; Type of the resource.
28006	Type *string `json:"type,omitempty"`
28007	// ID - Resource ID.
28008	ID *string `json:"id,omitempty"`
28009}
28010
28011// MarshalJSON is the custom marshaler for Probe.
28012func (p Probe) MarshalJSON() ([]byte, error) {
28013	objectMap := make(map[string]interface{})
28014	if p.ProbePropertiesFormat != nil {
28015		objectMap["properties"] = p.ProbePropertiesFormat
28016	}
28017	if p.Name != nil {
28018		objectMap["name"] = p.Name
28019	}
28020	if p.ID != nil {
28021		objectMap["id"] = p.ID
28022	}
28023	return json.Marshal(objectMap)
28024}
28025
28026// UnmarshalJSON is the custom unmarshaler for Probe struct.
28027func (p *Probe) UnmarshalJSON(body []byte) error {
28028	var m map[string]*json.RawMessage
28029	err := json.Unmarshal(body, &m)
28030	if err != nil {
28031		return err
28032	}
28033	for k, v := range m {
28034		switch k {
28035		case "properties":
28036			if v != nil {
28037				var probePropertiesFormat ProbePropertiesFormat
28038				err = json.Unmarshal(*v, &probePropertiesFormat)
28039				if err != nil {
28040					return err
28041				}
28042				p.ProbePropertiesFormat = &probePropertiesFormat
28043			}
28044		case "name":
28045			if v != nil {
28046				var name string
28047				err = json.Unmarshal(*v, &name)
28048				if err != nil {
28049					return err
28050				}
28051				p.Name = &name
28052			}
28053		case "etag":
28054			if v != nil {
28055				var etag string
28056				err = json.Unmarshal(*v, &etag)
28057				if err != nil {
28058					return err
28059				}
28060				p.Etag = &etag
28061			}
28062		case "type":
28063			if v != nil {
28064				var typeVar string
28065				err = json.Unmarshal(*v, &typeVar)
28066				if err != nil {
28067					return err
28068				}
28069				p.Type = &typeVar
28070			}
28071		case "id":
28072			if v != nil {
28073				var ID string
28074				err = json.Unmarshal(*v, &ID)
28075				if err != nil {
28076					return err
28077				}
28078				p.ID = &ID
28079			}
28080		}
28081	}
28082
28083	return nil
28084}
28085
28086// ProbePropertiesFormat load balancer probe resource.
28087type ProbePropertiesFormat struct {
28088	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
28089	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
28090	// Protocol - The protocol of the end point. If 'Tcp' is specified, a received ACK is required for the probe to be successful. If 'Http' or 'Https' is specified, a 200 OK response from the specifies URI is required for the probe to be successful. Possible values include: 'ProbeProtocolHTTP', 'ProbeProtocolTCP', 'ProbeProtocolHTTPS'
28091	Protocol ProbeProtocol `json:"protocol,omitempty"`
28092	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
28093	Port *int32 `json:"port,omitempty"`
28094	// IntervalInSeconds - The interval, in seconds, for how frequently to probe the endpoint for health status. Typically, the interval is slightly less than half the allocated timeout period (in seconds) which allows two full probes before taking the instance out of rotation. The default value is 15, the minimum value is 5.
28095	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
28096	// NumberOfProbes - The number of probes where if no response, will result in stopping further traffic from being delivered to the endpoint. This values allows endpoints to be taken out of rotation faster or slower than the typical times used in Azure.
28097	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
28098	// RequestPath - The URI used for requesting health status from the VM. Path is required if a protocol is set to http. Otherwise, it is not allowed. There is no default value.
28099	RequestPath *string `json:"requestPath,omitempty"`
28100	// ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28101	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28102}
28103
28104// Profile network profile resource.
28105type Profile struct {
28106	autorest.Response `json:"-"`
28107	// ProfilePropertiesFormat - Network profile properties.
28108	*ProfilePropertiesFormat `json:"properties,omitempty"`
28109	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28110	Etag *string `json:"etag,omitempty"`
28111	// ID - Resource ID.
28112	ID *string `json:"id,omitempty"`
28113	// Name - READ-ONLY; Resource name.
28114	Name *string `json:"name,omitempty"`
28115	// Type - READ-ONLY; Resource type.
28116	Type *string `json:"type,omitempty"`
28117	// Location - Resource location.
28118	Location *string `json:"location,omitempty"`
28119	// Tags - Resource tags.
28120	Tags map[string]*string `json:"tags"`
28121}
28122
28123// MarshalJSON is the custom marshaler for Profile.
28124func (p Profile) MarshalJSON() ([]byte, error) {
28125	objectMap := make(map[string]interface{})
28126	if p.ProfilePropertiesFormat != nil {
28127		objectMap["properties"] = p.ProfilePropertiesFormat
28128	}
28129	if p.ID != nil {
28130		objectMap["id"] = p.ID
28131	}
28132	if p.Location != nil {
28133		objectMap["location"] = p.Location
28134	}
28135	if p.Tags != nil {
28136		objectMap["tags"] = p.Tags
28137	}
28138	return json.Marshal(objectMap)
28139}
28140
28141// UnmarshalJSON is the custom unmarshaler for Profile struct.
28142func (p *Profile) UnmarshalJSON(body []byte) error {
28143	var m map[string]*json.RawMessage
28144	err := json.Unmarshal(body, &m)
28145	if err != nil {
28146		return err
28147	}
28148	for k, v := range m {
28149		switch k {
28150		case "properties":
28151			if v != nil {
28152				var profilePropertiesFormat ProfilePropertiesFormat
28153				err = json.Unmarshal(*v, &profilePropertiesFormat)
28154				if err != nil {
28155					return err
28156				}
28157				p.ProfilePropertiesFormat = &profilePropertiesFormat
28158			}
28159		case "etag":
28160			if v != nil {
28161				var etag string
28162				err = json.Unmarshal(*v, &etag)
28163				if err != nil {
28164					return err
28165				}
28166				p.Etag = &etag
28167			}
28168		case "id":
28169			if v != nil {
28170				var ID string
28171				err = json.Unmarshal(*v, &ID)
28172				if err != nil {
28173					return err
28174				}
28175				p.ID = &ID
28176			}
28177		case "name":
28178			if v != nil {
28179				var name string
28180				err = json.Unmarshal(*v, &name)
28181				if err != nil {
28182					return err
28183				}
28184				p.Name = &name
28185			}
28186		case "type":
28187			if v != nil {
28188				var typeVar string
28189				err = json.Unmarshal(*v, &typeVar)
28190				if err != nil {
28191					return err
28192				}
28193				p.Type = &typeVar
28194			}
28195		case "location":
28196			if v != nil {
28197				var location string
28198				err = json.Unmarshal(*v, &location)
28199				if err != nil {
28200					return err
28201				}
28202				p.Location = &location
28203			}
28204		case "tags":
28205			if v != nil {
28206				var tags map[string]*string
28207				err = json.Unmarshal(*v, &tags)
28208				if err != nil {
28209					return err
28210				}
28211				p.Tags = tags
28212			}
28213		}
28214	}
28215
28216	return nil
28217}
28218
28219// ProfileListResult response for ListNetworkProfiles API service call.
28220type ProfileListResult struct {
28221	autorest.Response `json:"-"`
28222	// Value - A list of network profiles that exist in a resource group.
28223	Value *[]Profile `json:"value,omitempty"`
28224	// NextLink - The URL to get the next set of results.
28225	NextLink *string `json:"nextLink,omitempty"`
28226}
28227
28228// ProfileListResultIterator provides access to a complete listing of Profile values.
28229type ProfileListResultIterator struct {
28230	i    int
28231	page ProfileListResultPage
28232}
28233
28234// NextWithContext advances to the next value.  If there was an error making
28235// the request the iterator does not advance and the error is returned.
28236func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
28237	if tracing.IsEnabled() {
28238		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
28239		defer func() {
28240			sc := -1
28241			if iter.Response().Response.Response != nil {
28242				sc = iter.Response().Response.Response.StatusCode
28243			}
28244			tracing.EndSpan(ctx, sc, err)
28245		}()
28246	}
28247	iter.i++
28248	if iter.i < len(iter.page.Values()) {
28249		return nil
28250	}
28251	err = iter.page.NextWithContext(ctx)
28252	if err != nil {
28253		iter.i--
28254		return err
28255	}
28256	iter.i = 0
28257	return nil
28258}
28259
28260// Next advances to the next value.  If there was an error making
28261// the request the iterator does not advance and the error is returned.
28262// Deprecated: Use NextWithContext() instead.
28263func (iter *ProfileListResultIterator) Next() error {
28264	return iter.NextWithContext(context.Background())
28265}
28266
28267// NotDone returns true if the enumeration should be started or is not yet complete.
28268func (iter ProfileListResultIterator) NotDone() bool {
28269	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28270}
28271
28272// Response returns the raw server response from the last page request.
28273func (iter ProfileListResultIterator) Response() ProfileListResult {
28274	return iter.page.Response()
28275}
28276
28277// Value returns the current value or a zero-initialized value if the
28278// iterator has advanced beyond the end of the collection.
28279func (iter ProfileListResultIterator) Value() Profile {
28280	if !iter.page.NotDone() {
28281		return Profile{}
28282	}
28283	return iter.page.Values()[iter.i]
28284}
28285
28286// Creates a new instance of the ProfileListResultIterator type.
28287func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
28288	return ProfileListResultIterator{page: page}
28289}
28290
28291// IsEmpty returns true if the ListResult contains no values.
28292func (plr ProfileListResult) IsEmpty() bool {
28293	return plr.Value == nil || len(*plr.Value) == 0
28294}
28295
28296// profileListResultPreparer prepares a request to retrieve the next set of results.
28297// It returns nil if no more results exist.
28298func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
28299	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
28300		return nil, nil
28301	}
28302	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28303		autorest.AsJSON(),
28304		autorest.AsGet(),
28305		autorest.WithBaseURL(to.String(plr.NextLink)))
28306}
28307
28308// ProfileListResultPage contains a page of Profile values.
28309type ProfileListResultPage struct {
28310	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
28311	plr ProfileListResult
28312}
28313
28314// NextWithContext advances to the next page of values.  If there was an error making
28315// the request the page does not advance and the error is returned.
28316func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
28317	if tracing.IsEnabled() {
28318		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
28319		defer func() {
28320			sc := -1
28321			if page.Response().Response.Response != nil {
28322				sc = page.Response().Response.Response.StatusCode
28323			}
28324			tracing.EndSpan(ctx, sc, err)
28325		}()
28326	}
28327	next, err := page.fn(ctx, page.plr)
28328	if err != nil {
28329		return err
28330	}
28331	page.plr = next
28332	return nil
28333}
28334
28335// Next advances to the next page of values.  If there was an error making
28336// the request the page does not advance and the error is returned.
28337// Deprecated: Use NextWithContext() instead.
28338func (page *ProfileListResultPage) Next() error {
28339	return page.NextWithContext(context.Background())
28340}
28341
28342// NotDone returns true if the page enumeration should be started or is not yet complete.
28343func (page ProfileListResultPage) NotDone() bool {
28344	return !page.plr.IsEmpty()
28345}
28346
28347// Response returns the raw server response from the last page request.
28348func (page ProfileListResultPage) Response() ProfileListResult {
28349	return page.plr
28350}
28351
28352// Values returns the slice of values for the current page or nil if there are no values.
28353func (page ProfileListResultPage) Values() []Profile {
28354	if page.plr.IsEmpty() {
28355		return nil
28356	}
28357	return *page.plr.Value
28358}
28359
28360// Creates a new instance of the ProfileListResultPage type.
28361func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
28362	return ProfileListResultPage{fn: getNextPage}
28363}
28364
28365// ProfilePropertiesFormat network profile properties.
28366type ProfilePropertiesFormat struct {
28367	// ContainerNetworkInterfaces - READ-ONLY; List of child container network interfaces.
28368	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
28369	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
28370	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
28371	// ResourceGUID - READ-ONLY; The resource GUID property of the network profile resource.
28372	ResourceGUID *string `json:"resourceGuid,omitempty"`
28373	// ProvisioningState - READ-ONLY; The provisioning state of the network profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28374	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28375}
28376
28377// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28378// operation.
28379type ProfilesDeleteFuture struct {
28380	azure.Future
28381}
28382
28383// Result returns the result of the asynchronous operation.
28384// If the operation has not completed it will return an error.
28385func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
28386	var done bool
28387	done, err = future.DoneWithContext(context.Background(), client)
28388	if err != nil {
28389		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
28390		return
28391	}
28392	if !done {
28393		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
28394		return
28395	}
28396	ar.Response = future.Response()
28397	return
28398}
28399
28400// PropagatedRouteTable the list of RouteTables to advertise the routes to.
28401type PropagatedRouteTable struct {
28402	// Labels - The list of labels.
28403	Labels *[]string `json:"labels,omitempty"`
28404	// Ids - The list of resource ids of all the RouteTables.
28405	Ids *[]SubResource `json:"ids,omitempty"`
28406}
28407
28408// ProtocolConfiguration configuration of the protocol.
28409type ProtocolConfiguration struct {
28410	// HTTPConfiguration - HTTP configuration of the connectivity check.
28411	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
28412}
28413
28414// ProtocolCustomSettingsFormat dDoS custom policy properties.
28415type ProtocolCustomSettingsFormat struct {
28416	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
28417	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
28418	// TriggerRateOverride - The customized DDoS protection trigger rate.
28419	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
28420	// SourceRateOverride - The customized DDoS protection source rate.
28421	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
28422	// TriggerSensitivityOverride - The customized DDoS protection trigger rate sensitivity degrees. High: Trigger rate set with most sensitivity w.r.t. normal traffic. Default: Trigger rate set with moderate sensitivity w.r.t. normal traffic. Low: Trigger rate set with less sensitivity w.r.t. normal traffic. Relaxed: Trigger rate set with least sensitivity w.r.t. normal traffic. Possible values include: 'Relaxed', 'Low', 'Default', 'High'
28423	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
28424}
28425
28426// PublicIPAddress public IP address resource.
28427type PublicIPAddress struct {
28428	autorest.Response `json:"-"`
28429	// Sku - The public IP address SKU.
28430	Sku *PublicIPAddressSku `json:"sku,omitempty"`
28431	// PublicIPAddressPropertiesFormat - Public IP address properties.
28432	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
28433	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28434	Etag *string `json:"etag,omitempty"`
28435	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
28436	Zones *[]string `json:"zones,omitempty"`
28437	// ID - Resource ID.
28438	ID *string `json:"id,omitempty"`
28439	// Name - READ-ONLY; Resource name.
28440	Name *string `json:"name,omitempty"`
28441	// Type - READ-ONLY; Resource type.
28442	Type *string `json:"type,omitempty"`
28443	// Location - Resource location.
28444	Location *string `json:"location,omitempty"`
28445	// Tags - Resource tags.
28446	Tags map[string]*string `json:"tags"`
28447}
28448
28449// MarshalJSON is the custom marshaler for PublicIPAddress.
28450func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
28451	objectMap := make(map[string]interface{})
28452	if pia.Sku != nil {
28453		objectMap["sku"] = pia.Sku
28454	}
28455	if pia.PublicIPAddressPropertiesFormat != nil {
28456		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
28457	}
28458	if pia.Zones != nil {
28459		objectMap["zones"] = pia.Zones
28460	}
28461	if pia.ID != nil {
28462		objectMap["id"] = pia.ID
28463	}
28464	if pia.Location != nil {
28465		objectMap["location"] = pia.Location
28466	}
28467	if pia.Tags != nil {
28468		objectMap["tags"] = pia.Tags
28469	}
28470	return json.Marshal(objectMap)
28471}
28472
28473// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
28474func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
28475	var m map[string]*json.RawMessage
28476	err := json.Unmarshal(body, &m)
28477	if err != nil {
28478		return err
28479	}
28480	for k, v := range m {
28481		switch k {
28482		case "sku":
28483			if v != nil {
28484				var sku PublicIPAddressSku
28485				err = json.Unmarshal(*v, &sku)
28486				if err != nil {
28487					return err
28488				}
28489				pia.Sku = &sku
28490			}
28491		case "properties":
28492			if v != nil {
28493				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
28494				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
28495				if err != nil {
28496					return err
28497				}
28498				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
28499			}
28500		case "etag":
28501			if v != nil {
28502				var etag string
28503				err = json.Unmarshal(*v, &etag)
28504				if err != nil {
28505					return err
28506				}
28507				pia.Etag = &etag
28508			}
28509		case "zones":
28510			if v != nil {
28511				var zones []string
28512				err = json.Unmarshal(*v, &zones)
28513				if err != nil {
28514					return err
28515				}
28516				pia.Zones = &zones
28517			}
28518		case "id":
28519			if v != nil {
28520				var ID string
28521				err = json.Unmarshal(*v, &ID)
28522				if err != nil {
28523					return err
28524				}
28525				pia.ID = &ID
28526			}
28527		case "name":
28528			if v != nil {
28529				var name string
28530				err = json.Unmarshal(*v, &name)
28531				if err != nil {
28532					return err
28533				}
28534				pia.Name = &name
28535			}
28536		case "type":
28537			if v != nil {
28538				var typeVar string
28539				err = json.Unmarshal(*v, &typeVar)
28540				if err != nil {
28541					return err
28542				}
28543				pia.Type = &typeVar
28544			}
28545		case "location":
28546			if v != nil {
28547				var location string
28548				err = json.Unmarshal(*v, &location)
28549				if err != nil {
28550					return err
28551				}
28552				pia.Location = &location
28553			}
28554		case "tags":
28555			if v != nil {
28556				var tags map[string]*string
28557				err = json.Unmarshal(*v, &tags)
28558				if err != nil {
28559					return err
28560				}
28561				pia.Tags = tags
28562			}
28563		}
28564	}
28565
28566	return nil
28567}
28568
28569// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address.
28570type PublicIPAddressDNSSettings struct {
28571	// DomainNameLabel - The domain name label. The concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system.
28572	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
28573	// Fqdn - The Fully Qualified Domain Name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.
28574	Fqdn *string `json:"fqdn,omitempty"`
28575	// ReverseFqdn - The reverse FQDN. A user-visible, fully qualified domain name that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.
28576	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
28577}
28578
28579// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28580// long-running operation.
28581type PublicIPAddressesCreateOrUpdateFuture struct {
28582	azure.Future
28583}
28584
28585// Result returns the result of the asynchronous operation.
28586// If the operation has not completed it will return an error.
28587func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
28588	var done bool
28589	done, err = future.DoneWithContext(context.Background(), client)
28590	if err != nil {
28591		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28592		return
28593	}
28594	if !done {
28595		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
28596		return
28597	}
28598	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28599	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
28600		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
28601		if err != nil {
28602			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
28603		}
28604	}
28605	return
28606}
28607
28608// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28609// operation.
28610type PublicIPAddressesDeleteFuture struct {
28611	azure.Future
28612}
28613
28614// Result returns the result of the asynchronous operation.
28615// If the operation has not completed it will return an error.
28616func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
28617	var done bool
28618	done, err = future.DoneWithContext(context.Background(), client)
28619	if err != nil {
28620		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
28621		return
28622	}
28623	if !done {
28624		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
28625		return
28626	}
28627	ar.Response = future.Response()
28628	return
28629}
28630
28631// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
28632type PublicIPAddressListResult struct {
28633	autorest.Response `json:"-"`
28634	// Value - A list of public IP addresses that exists in a resource group.
28635	Value *[]PublicIPAddress `json:"value,omitempty"`
28636	// NextLink - The URL to get the next set of results.
28637	NextLink *string `json:"nextLink,omitempty"`
28638}
28639
28640// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
28641type PublicIPAddressListResultIterator struct {
28642	i    int
28643	page PublicIPAddressListResultPage
28644}
28645
28646// NextWithContext advances to the next value.  If there was an error making
28647// the request the iterator does not advance and the error is returned.
28648func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
28649	if tracing.IsEnabled() {
28650		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
28651		defer func() {
28652			sc := -1
28653			if iter.Response().Response.Response != nil {
28654				sc = iter.Response().Response.Response.StatusCode
28655			}
28656			tracing.EndSpan(ctx, sc, err)
28657		}()
28658	}
28659	iter.i++
28660	if iter.i < len(iter.page.Values()) {
28661		return nil
28662	}
28663	err = iter.page.NextWithContext(ctx)
28664	if err != nil {
28665		iter.i--
28666		return err
28667	}
28668	iter.i = 0
28669	return nil
28670}
28671
28672// Next advances to the next value.  If there was an error making
28673// the request the iterator does not advance and the error is returned.
28674// Deprecated: Use NextWithContext() instead.
28675func (iter *PublicIPAddressListResultIterator) Next() error {
28676	return iter.NextWithContext(context.Background())
28677}
28678
28679// NotDone returns true if the enumeration should be started or is not yet complete.
28680func (iter PublicIPAddressListResultIterator) NotDone() bool {
28681	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28682}
28683
28684// Response returns the raw server response from the last page request.
28685func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
28686	return iter.page.Response()
28687}
28688
28689// Value returns the current value or a zero-initialized value if the
28690// iterator has advanced beyond the end of the collection.
28691func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
28692	if !iter.page.NotDone() {
28693		return PublicIPAddress{}
28694	}
28695	return iter.page.Values()[iter.i]
28696}
28697
28698// Creates a new instance of the PublicIPAddressListResultIterator type.
28699func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
28700	return PublicIPAddressListResultIterator{page: page}
28701}
28702
28703// IsEmpty returns true if the ListResult contains no values.
28704func (pialr PublicIPAddressListResult) IsEmpty() bool {
28705	return pialr.Value == nil || len(*pialr.Value) == 0
28706}
28707
28708// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
28709// It returns nil if no more results exist.
28710func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
28711	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
28712		return nil, nil
28713	}
28714	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28715		autorest.AsJSON(),
28716		autorest.AsGet(),
28717		autorest.WithBaseURL(to.String(pialr.NextLink)))
28718}
28719
28720// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
28721type PublicIPAddressListResultPage struct {
28722	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
28723	pialr PublicIPAddressListResult
28724}
28725
28726// NextWithContext advances to the next page of values.  If there was an error making
28727// the request the page does not advance and the error is returned.
28728func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
28729	if tracing.IsEnabled() {
28730		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
28731		defer func() {
28732			sc := -1
28733			if page.Response().Response.Response != nil {
28734				sc = page.Response().Response.Response.StatusCode
28735			}
28736			tracing.EndSpan(ctx, sc, err)
28737		}()
28738	}
28739	next, err := page.fn(ctx, page.pialr)
28740	if err != nil {
28741		return err
28742	}
28743	page.pialr = next
28744	return nil
28745}
28746
28747// Next advances to the next page of values.  If there was an error making
28748// the request the page does not advance and the error is returned.
28749// Deprecated: Use NextWithContext() instead.
28750func (page *PublicIPAddressListResultPage) Next() error {
28751	return page.NextWithContext(context.Background())
28752}
28753
28754// NotDone returns true if the page enumeration should be started or is not yet complete.
28755func (page PublicIPAddressListResultPage) NotDone() bool {
28756	return !page.pialr.IsEmpty()
28757}
28758
28759// Response returns the raw server response from the last page request.
28760func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
28761	return page.pialr
28762}
28763
28764// Values returns the slice of values for the current page or nil if there are no values.
28765func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
28766	if page.pialr.IsEmpty() {
28767		return nil
28768	}
28769	return *page.pialr.Value
28770}
28771
28772// Creates a new instance of the PublicIPAddressListResultPage type.
28773func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
28774	return PublicIPAddressListResultPage{fn: getNextPage}
28775}
28776
28777// PublicIPAddressPropertiesFormat public IP address properties.
28778type PublicIPAddressPropertiesFormat struct {
28779	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
28780	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
28781	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
28782	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
28783	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
28784	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
28785	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
28786	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
28787	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
28788	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
28789	// IPTags - The list of tags associated with the public IP address.
28790	IPTags *[]IPTag `json:"ipTags,omitempty"`
28791	// IPAddress - The IP address associated with the public IP address resource.
28792	IPAddress *string `json:"ipAddress,omitempty"`
28793	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
28794	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
28795	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
28796	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
28797	// ResourceGUID - READ-ONLY; The resource GUID property of the public IP address resource.
28798	ResourceGUID *string `json:"resourceGuid,omitempty"`
28799	// ProvisioningState - READ-ONLY; The provisioning state of the public IP address resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28800	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28801}
28802
28803// PublicIPAddressSku SKU of a public IP address.
28804type PublicIPAddressSku struct {
28805	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
28806	Name PublicIPAddressSkuName `json:"name,omitempty"`
28807}
28808
28809// PublicIPPrefix public IP prefix resource.
28810type PublicIPPrefix struct {
28811	autorest.Response `json:"-"`
28812	// Sku - The public IP prefix SKU.
28813	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
28814	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
28815	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
28816	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28817	Etag *string `json:"etag,omitempty"`
28818	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
28819	Zones *[]string `json:"zones,omitempty"`
28820	// ID - Resource ID.
28821	ID *string `json:"id,omitempty"`
28822	// Name - READ-ONLY; Resource name.
28823	Name *string `json:"name,omitempty"`
28824	// Type - READ-ONLY; Resource type.
28825	Type *string `json:"type,omitempty"`
28826	// Location - Resource location.
28827	Location *string `json:"location,omitempty"`
28828	// Tags - Resource tags.
28829	Tags map[string]*string `json:"tags"`
28830}
28831
28832// MarshalJSON is the custom marshaler for PublicIPPrefix.
28833func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
28834	objectMap := make(map[string]interface{})
28835	if pip.Sku != nil {
28836		objectMap["sku"] = pip.Sku
28837	}
28838	if pip.PublicIPPrefixPropertiesFormat != nil {
28839		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
28840	}
28841	if pip.Zones != nil {
28842		objectMap["zones"] = pip.Zones
28843	}
28844	if pip.ID != nil {
28845		objectMap["id"] = pip.ID
28846	}
28847	if pip.Location != nil {
28848		objectMap["location"] = pip.Location
28849	}
28850	if pip.Tags != nil {
28851		objectMap["tags"] = pip.Tags
28852	}
28853	return json.Marshal(objectMap)
28854}
28855
28856// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
28857func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
28858	var m map[string]*json.RawMessage
28859	err := json.Unmarshal(body, &m)
28860	if err != nil {
28861		return err
28862	}
28863	for k, v := range m {
28864		switch k {
28865		case "sku":
28866			if v != nil {
28867				var sku PublicIPPrefixSku
28868				err = json.Unmarshal(*v, &sku)
28869				if err != nil {
28870					return err
28871				}
28872				pip.Sku = &sku
28873			}
28874		case "properties":
28875			if v != nil {
28876				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
28877				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
28878				if err != nil {
28879					return err
28880				}
28881				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
28882			}
28883		case "etag":
28884			if v != nil {
28885				var etag string
28886				err = json.Unmarshal(*v, &etag)
28887				if err != nil {
28888					return err
28889				}
28890				pip.Etag = &etag
28891			}
28892		case "zones":
28893			if v != nil {
28894				var zones []string
28895				err = json.Unmarshal(*v, &zones)
28896				if err != nil {
28897					return err
28898				}
28899				pip.Zones = &zones
28900			}
28901		case "id":
28902			if v != nil {
28903				var ID string
28904				err = json.Unmarshal(*v, &ID)
28905				if err != nil {
28906					return err
28907				}
28908				pip.ID = &ID
28909			}
28910		case "name":
28911			if v != nil {
28912				var name string
28913				err = json.Unmarshal(*v, &name)
28914				if err != nil {
28915					return err
28916				}
28917				pip.Name = &name
28918			}
28919		case "type":
28920			if v != nil {
28921				var typeVar string
28922				err = json.Unmarshal(*v, &typeVar)
28923				if err != nil {
28924					return err
28925				}
28926				pip.Type = &typeVar
28927			}
28928		case "location":
28929			if v != nil {
28930				var location string
28931				err = json.Unmarshal(*v, &location)
28932				if err != nil {
28933					return err
28934				}
28935				pip.Location = &location
28936			}
28937		case "tags":
28938			if v != nil {
28939				var tags map[string]*string
28940				err = json.Unmarshal(*v, &tags)
28941				if err != nil {
28942					return err
28943				}
28944				pip.Tags = tags
28945			}
28946		}
28947	}
28948
28949	return nil
28950}
28951
28952// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28953// long-running operation.
28954type PublicIPPrefixesCreateOrUpdateFuture struct {
28955	azure.Future
28956}
28957
28958// Result returns the result of the asynchronous operation.
28959// If the operation has not completed it will return an error.
28960func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
28961	var done bool
28962	done, err = future.DoneWithContext(context.Background(), client)
28963	if err != nil {
28964		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28965		return
28966	}
28967	if !done {
28968		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
28969		return
28970	}
28971	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28972	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
28973		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
28974		if err != nil {
28975			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
28976		}
28977	}
28978	return
28979}
28980
28981// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28982// operation.
28983type PublicIPPrefixesDeleteFuture struct {
28984	azure.Future
28985}
28986
28987// Result returns the result of the asynchronous operation.
28988// If the operation has not completed it will return an error.
28989func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
28990	var done bool
28991	done, err = future.DoneWithContext(context.Background(), client)
28992	if err != nil {
28993		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
28994		return
28995	}
28996	if !done {
28997		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
28998		return
28999	}
29000	ar.Response = future.Response()
29001	return
29002}
29003
29004// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
29005type PublicIPPrefixListResult struct {
29006	autorest.Response `json:"-"`
29007	// Value - A list of public IP prefixes that exists in a resource group.
29008	Value *[]PublicIPPrefix `json:"value,omitempty"`
29009	// NextLink - The URL to get the next set of results.
29010	NextLink *string `json:"nextLink,omitempty"`
29011}
29012
29013// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
29014type PublicIPPrefixListResultIterator struct {
29015	i    int
29016	page PublicIPPrefixListResultPage
29017}
29018
29019// NextWithContext advances to the next value.  If there was an error making
29020// the request the iterator does not advance and the error is returned.
29021func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
29022	if tracing.IsEnabled() {
29023		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
29024		defer func() {
29025			sc := -1
29026			if iter.Response().Response.Response != nil {
29027				sc = iter.Response().Response.Response.StatusCode
29028			}
29029			tracing.EndSpan(ctx, sc, err)
29030		}()
29031	}
29032	iter.i++
29033	if iter.i < len(iter.page.Values()) {
29034		return nil
29035	}
29036	err = iter.page.NextWithContext(ctx)
29037	if err != nil {
29038		iter.i--
29039		return err
29040	}
29041	iter.i = 0
29042	return nil
29043}
29044
29045// Next advances to the next value.  If there was an error making
29046// the request the iterator does not advance and the error is returned.
29047// Deprecated: Use NextWithContext() instead.
29048func (iter *PublicIPPrefixListResultIterator) Next() error {
29049	return iter.NextWithContext(context.Background())
29050}
29051
29052// NotDone returns true if the enumeration should be started or is not yet complete.
29053func (iter PublicIPPrefixListResultIterator) NotDone() bool {
29054	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29055}
29056
29057// Response returns the raw server response from the last page request.
29058func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
29059	return iter.page.Response()
29060}
29061
29062// Value returns the current value or a zero-initialized value if the
29063// iterator has advanced beyond the end of the collection.
29064func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
29065	if !iter.page.NotDone() {
29066		return PublicIPPrefix{}
29067	}
29068	return iter.page.Values()[iter.i]
29069}
29070
29071// Creates a new instance of the PublicIPPrefixListResultIterator type.
29072func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
29073	return PublicIPPrefixListResultIterator{page: page}
29074}
29075
29076// IsEmpty returns true if the ListResult contains no values.
29077func (piplr PublicIPPrefixListResult) IsEmpty() bool {
29078	return piplr.Value == nil || len(*piplr.Value) == 0
29079}
29080
29081// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
29082// It returns nil if no more results exist.
29083func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
29084	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
29085		return nil, nil
29086	}
29087	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29088		autorest.AsJSON(),
29089		autorest.AsGet(),
29090		autorest.WithBaseURL(to.String(piplr.NextLink)))
29091}
29092
29093// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
29094type PublicIPPrefixListResultPage struct {
29095	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
29096	piplr PublicIPPrefixListResult
29097}
29098
29099// NextWithContext advances to the next page of values.  If there was an error making
29100// the request the page does not advance and the error is returned.
29101func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
29102	if tracing.IsEnabled() {
29103		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
29104		defer func() {
29105			sc := -1
29106			if page.Response().Response.Response != nil {
29107				sc = page.Response().Response.Response.StatusCode
29108			}
29109			tracing.EndSpan(ctx, sc, err)
29110		}()
29111	}
29112	next, err := page.fn(ctx, page.piplr)
29113	if err != nil {
29114		return err
29115	}
29116	page.piplr = next
29117	return nil
29118}
29119
29120// Next advances to the next page of values.  If there was an error making
29121// the request the page does not advance and the error is returned.
29122// Deprecated: Use NextWithContext() instead.
29123func (page *PublicIPPrefixListResultPage) Next() error {
29124	return page.NextWithContext(context.Background())
29125}
29126
29127// NotDone returns true if the page enumeration should be started or is not yet complete.
29128func (page PublicIPPrefixListResultPage) NotDone() bool {
29129	return !page.piplr.IsEmpty()
29130}
29131
29132// Response returns the raw server response from the last page request.
29133func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
29134	return page.piplr
29135}
29136
29137// Values returns the slice of values for the current page or nil if there are no values.
29138func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
29139	if page.piplr.IsEmpty() {
29140		return nil
29141	}
29142	return *page.piplr.Value
29143}
29144
29145// Creates a new instance of the PublicIPPrefixListResultPage type.
29146func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
29147	return PublicIPPrefixListResultPage{fn: getNextPage}
29148}
29149
29150// PublicIPPrefixPropertiesFormat public IP prefix properties.
29151type PublicIPPrefixPropertiesFormat struct {
29152	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
29153	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
29154	// IPTags - The list of tags associated with the public IP prefix.
29155	IPTags *[]IPTag `json:"ipTags,omitempty"`
29156	// PrefixLength - The Length of the Public IP Prefix.
29157	PrefixLength *int32 `json:"prefixLength,omitempty"`
29158	// IPPrefix - READ-ONLY; The allocated Prefix.
29159	IPPrefix *string `json:"ipPrefix,omitempty"`
29160	// PublicIPAddresses - READ-ONLY; The list of all referenced PublicIPAddresses.
29161	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
29162	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
29163	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
29164	// ResourceGUID - READ-ONLY; The resource GUID property of the public IP prefix resource.
29165	ResourceGUID *string `json:"resourceGuid,omitempty"`
29166	// ProvisioningState - READ-ONLY; The provisioning state of the public IP prefix resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29167	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29168}
29169
29170// PublicIPPrefixSku SKU of a public IP prefix.
29171type PublicIPPrefixSku struct {
29172	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
29173	Name PublicIPPrefixSkuName `json:"name,omitempty"`
29174}
29175
29176// PutBastionShareableLinkAllFuture an abstraction for monitoring and retrieving the results of a
29177// long-running operation.
29178type PutBastionShareableLinkAllFuture struct {
29179	azure.Future
29180}
29181
29182// Result returns the result of the asynchronous operation.
29183// If the operation has not completed it will return an error.
29184func (future *PutBastionShareableLinkAllFuture) Result(client BaseClient) (bsllrp BastionShareableLinkListResultPage, err error) {
29185	var done bool
29186	done, err = future.DoneWithContext(context.Background(), client)
29187	if err != nil {
29188		err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkAllFuture", "Result", future.Response(), "Polling failure")
29189		return
29190	}
29191	if !done {
29192		err = azure.NewAsyncOpIncompleteError("network.PutBastionShareableLinkAllFuture")
29193		return
29194	}
29195	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29196	if bsllrp.bsllr.Response.Response, err = future.GetResult(sender); err == nil && bsllrp.bsllr.Response.Response.StatusCode != http.StatusNoContent {
29197		bsllrp, err = client.PutBastionShareableLinkResponder(bsllrp.bsllr.Response.Response)
29198		if err != nil {
29199			err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkAllFuture", "Result", bsllrp.bsllr.Response.Response, "Failure responding to request")
29200		}
29201	}
29202	return
29203}
29204
29205// PutBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a long-running
29206// operation.
29207type PutBastionShareableLinkFuture struct {
29208	azure.Future
29209}
29210
29211// Result returns the result of the asynchronous operation.
29212// If the operation has not completed it will return an error.
29213func (future *PutBastionShareableLinkFuture) Result(client BaseClient) (bsllrp BastionShareableLinkListResultPage, err error) {
29214	var done bool
29215	done, err = future.DoneWithContext(context.Background(), client)
29216	if err != nil {
29217		err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkFuture", "Result", future.Response(), "Polling failure")
29218		return
29219	}
29220	if !done {
29221		err = azure.NewAsyncOpIncompleteError("network.PutBastionShareableLinkFuture")
29222		return
29223	}
29224	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29225	if bsllrp.bsllr.Response.Response, err = future.GetResult(sender); err == nil && bsllrp.bsllr.Response.Response.StatusCode != http.StatusNoContent {
29226		bsllrp, err = client.PutBastionShareableLinkResponder(bsllrp.bsllr.Response.Response)
29227		if err != nil {
29228			err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkFuture", "Result", bsllrp.bsllr.Response.Response, "Failure responding to request")
29229		}
29230	}
29231	return
29232}
29233
29234// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
29235type QueryTroubleshootingParameters struct {
29236	// TargetResourceID - The target resource ID to query the troubleshooting result.
29237	TargetResourceID *string `json:"targetResourceId,omitempty"`
29238}
29239
29240// RadiusServer radius Server Settings.
29241type RadiusServer struct {
29242	// RadiusServerAddress - The address of this radius server.
29243	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
29244	// RadiusServerScore - The initial score assigned to this radius server.
29245	RadiusServerScore *int64 `json:"radiusServerScore,omitempty"`
29246	// RadiusServerSecret - The secret used for this radius server.
29247	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
29248}
29249
29250// RecordSet a collective group of information about the record set information.
29251type RecordSet struct {
29252	// RecordType - Resource record type.
29253	RecordType *string `json:"recordType,omitempty"`
29254	// RecordSetName - Recordset name.
29255	RecordSetName *string `json:"recordSetName,omitempty"`
29256	// Fqdn - Fqdn that resolves to private endpoint ip address.
29257	Fqdn *string `json:"fqdn,omitempty"`
29258	// ProvisioningState - READ-ONLY; The provisioning state of the recordset. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29259	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29260	// TTL - Recordset time to live.
29261	TTL *int32 `json:"ttl,omitempty"`
29262	// IPAddresses - The private ip address of the private endpoint.
29263	IPAddresses *[]string `json:"ipAddresses,omitempty"`
29264}
29265
29266// ReferencedPublicIPAddress reference to a public IP address.
29267type ReferencedPublicIPAddress struct {
29268	// ID - The PublicIPAddress Reference.
29269	ID *string `json:"id,omitempty"`
29270}
29271
29272// Resource common resource representation.
29273type Resource struct {
29274	// ID - Resource ID.
29275	ID *string `json:"id,omitempty"`
29276	// Name - READ-ONLY; Resource name.
29277	Name *string `json:"name,omitempty"`
29278	// Type - READ-ONLY; Resource type.
29279	Type *string `json:"type,omitempty"`
29280	// Location - Resource location.
29281	Location *string `json:"location,omitempty"`
29282	// Tags - Resource tags.
29283	Tags map[string]*string `json:"tags"`
29284}
29285
29286// MarshalJSON is the custom marshaler for Resource.
29287func (r Resource) MarshalJSON() ([]byte, error) {
29288	objectMap := make(map[string]interface{})
29289	if r.ID != nil {
29290		objectMap["id"] = r.ID
29291	}
29292	if r.Location != nil {
29293		objectMap["location"] = r.Location
29294	}
29295	if r.Tags != nil {
29296		objectMap["tags"] = r.Tags
29297	}
29298	return json.Marshal(objectMap)
29299}
29300
29301// ResourceNavigationLink resourceNavigationLink resource.
29302type ResourceNavigationLink struct {
29303	// ResourceNavigationLinkFormat - Resource navigation link properties format.
29304	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
29305	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
29306	Name *string `json:"name,omitempty"`
29307	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
29308	Etag *string `json:"etag,omitempty"`
29309	// Type - READ-ONLY; Resource type.
29310	Type *string `json:"type,omitempty"`
29311	// ID - Resource ID.
29312	ID *string `json:"id,omitempty"`
29313}
29314
29315// MarshalJSON is the custom marshaler for ResourceNavigationLink.
29316func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
29317	objectMap := make(map[string]interface{})
29318	if rnl.ResourceNavigationLinkFormat != nil {
29319		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
29320	}
29321	if rnl.Name != nil {
29322		objectMap["name"] = rnl.Name
29323	}
29324	if rnl.ID != nil {
29325		objectMap["id"] = rnl.ID
29326	}
29327	return json.Marshal(objectMap)
29328}
29329
29330// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
29331func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
29332	var m map[string]*json.RawMessage
29333	err := json.Unmarshal(body, &m)
29334	if err != nil {
29335		return err
29336	}
29337	for k, v := range m {
29338		switch k {
29339		case "properties":
29340			if v != nil {
29341				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
29342				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
29343				if err != nil {
29344					return err
29345				}
29346				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
29347			}
29348		case "name":
29349			if v != nil {
29350				var name string
29351				err = json.Unmarshal(*v, &name)
29352				if err != nil {
29353					return err
29354				}
29355				rnl.Name = &name
29356			}
29357		case "etag":
29358			if v != nil {
29359				var etag string
29360				err = json.Unmarshal(*v, &etag)
29361				if err != nil {
29362					return err
29363				}
29364				rnl.Etag = &etag
29365			}
29366		case "type":
29367			if v != nil {
29368				var typeVar string
29369				err = json.Unmarshal(*v, &typeVar)
29370				if err != nil {
29371					return err
29372				}
29373				rnl.Type = &typeVar
29374			}
29375		case "id":
29376			if v != nil {
29377				var ID string
29378				err = json.Unmarshal(*v, &ID)
29379				if err != nil {
29380					return err
29381				}
29382				rnl.ID = &ID
29383			}
29384		}
29385	}
29386
29387	return nil
29388}
29389
29390// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
29391type ResourceNavigationLinkFormat struct {
29392	// LinkedResourceType - Resource type of the linked resource.
29393	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
29394	// Link - Link to the external resource.
29395	Link *string `json:"link,omitempty"`
29396	// ProvisioningState - READ-ONLY; The provisioning state of the resource navigation link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29397	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29398}
29399
29400// ResourceNavigationLinksListResult response for ResourceNavigationLinks_List operation.
29401type ResourceNavigationLinksListResult struct {
29402	autorest.Response `json:"-"`
29403	// Value - The resource navigation links in a subnet.
29404	Value *[]ResourceNavigationLink `json:"value,omitempty"`
29405	// NextLink - READ-ONLY; The URL to get the next set of results.
29406	NextLink *string `json:"nextLink,omitempty"`
29407}
29408
29409// ResourceSet the base resource set for visibility and auto-approval.
29410type ResourceSet struct {
29411	// Subscriptions - The list of subscriptions.
29412	Subscriptions *[]string `json:"subscriptions,omitempty"`
29413}
29414
29415// RetentionPolicyParameters parameters that define the retention policy for flow log.
29416type RetentionPolicyParameters struct {
29417	// Days - Number of days to retain flow log records.
29418	Days *int32 `json:"days,omitempty"`
29419	// Enabled - Flag to enable/disable retention.
29420	Enabled *bool `json:"enabled,omitempty"`
29421}
29422
29423// Route route resource.
29424type Route struct {
29425	autorest.Response `json:"-"`
29426	// RoutePropertiesFormat - Properties of the route.
29427	*RoutePropertiesFormat `json:"properties,omitempty"`
29428	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
29429	Name *string `json:"name,omitempty"`
29430	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
29431	Etag *string `json:"etag,omitempty"`
29432	// ID - Resource ID.
29433	ID *string `json:"id,omitempty"`
29434}
29435
29436// MarshalJSON is the custom marshaler for Route.
29437func (r Route) MarshalJSON() ([]byte, error) {
29438	objectMap := make(map[string]interface{})
29439	if r.RoutePropertiesFormat != nil {
29440		objectMap["properties"] = r.RoutePropertiesFormat
29441	}
29442	if r.Name != nil {
29443		objectMap["name"] = r.Name
29444	}
29445	if r.ID != nil {
29446		objectMap["id"] = r.ID
29447	}
29448	return json.Marshal(objectMap)
29449}
29450
29451// UnmarshalJSON is the custom unmarshaler for Route struct.
29452func (r *Route) UnmarshalJSON(body []byte) error {
29453	var m map[string]*json.RawMessage
29454	err := json.Unmarshal(body, &m)
29455	if err != nil {
29456		return err
29457	}
29458	for k, v := range m {
29459		switch k {
29460		case "properties":
29461			if v != nil {
29462				var routePropertiesFormat RoutePropertiesFormat
29463				err = json.Unmarshal(*v, &routePropertiesFormat)
29464				if err != nil {
29465					return err
29466				}
29467				r.RoutePropertiesFormat = &routePropertiesFormat
29468			}
29469		case "name":
29470			if v != nil {
29471				var name string
29472				err = json.Unmarshal(*v, &name)
29473				if err != nil {
29474					return err
29475				}
29476				r.Name = &name
29477			}
29478		case "etag":
29479			if v != nil {
29480				var etag string
29481				err = json.Unmarshal(*v, &etag)
29482				if err != nil {
29483					return err
29484				}
29485				r.Etag = &etag
29486			}
29487		case "id":
29488			if v != nil {
29489				var ID string
29490				err = json.Unmarshal(*v, &ID)
29491				if err != nil {
29492					return err
29493				}
29494				r.ID = &ID
29495			}
29496		}
29497	}
29498
29499	return nil
29500}
29501
29502// RouteFilter route Filter Resource.
29503type RouteFilter struct {
29504	autorest.Response `json:"-"`
29505	// RouteFilterPropertiesFormat - Properties of the route filter.
29506	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
29507	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
29508	Etag *string `json:"etag,omitempty"`
29509	// ID - Resource ID.
29510	ID *string `json:"id,omitempty"`
29511	// Name - READ-ONLY; Resource name.
29512	Name *string `json:"name,omitempty"`
29513	// Type - READ-ONLY; Resource type.
29514	Type *string `json:"type,omitempty"`
29515	// Location - Resource location.
29516	Location *string `json:"location,omitempty"`
29517	// Tags - Resource tags.
29518	Tags map[string]*string `json:"tags"`
29519}
29520
29521// MarshalJSON is the custom marshaler for RouteFilter.
29522func (rf RouteFilter) MarshalJSON() ([]byte, error) {
29523	objectMap := make(map[string]interface{})
29524	if rf.RouteFilterPropertiesFormat != nil {
29525		objectMap["properties"] = rf.RouteFilterPropertiesFormat
29526	}
29527	if rf.ID != nil {
29528		objectMap["id"] = rf.ID
29529	}
29530	if rf.Location != nil {
29531		objectMap["location"] = rf.Location
29532	}
29533	if rf.Tags != nil {
29534		objectMap["tags"] = rf.Tags
29535	}
29536	return json.Marshal(objectMap)
29537}
29538
29539// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
29540func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
29541	var m map[string]*json.RawMessage
29542	err := json.Unmarshal(body, &m)
29543	if err != nil {
29544		return err
29545	}
29546	for k, v := range m {
29547		switch k {
29548		case "properties":
29549			if v != nil {
29550				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
29551				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
29552				if err != nil {
29553					return err
29554				}
29555				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
29556			}
29557		case "etag":
29558			if v != nil {
29559				var etag string
29560				err = json.Unmarshal(*v, &etag)
29561				if err != nil {
29562					return err
29563				}
29564				rf.Etag = &etag
29565			}
29566		case "id":
29567			if v != nil {
29568				var ID string
29569				err = json.Unmarshal(*v, &ID)
29570				if err != nil {
29571					return err
29572				}
29573				rf.ID = &ID
29574			}
29575		case "name":
29576			if v != nil {
29577				var name string
29578				err = json.Unmarshal(*v, &name)
29579				if err != nil {
29580					return err
29581				}
29582				rf.Name = &name
29583			}
29584		case "type":
29585			if v != nil {
29586				var typeVar string
29587				err = json.Unmarshal(*v, &typeVar)
29588				if err != nil {
29589					return err
29590				}
29591				rf.Type = &typeVar
29592			}
29593		case "location":
29594			if v != nil {
29595				var location string
29596				err = json.Unmarshal(*v, &location)
29597				if err != nil {
29598					return err
29599				}
29600				rf.Location = &location
29601			}
29602		case "tags":
29603			if v != nil {
29604				var tags map[string]*string
29605				err = json.Unmarshal(*v, &tags)
29606				if err != nil {
29607					return err
29608				}
29609				rf.Tags = tags
29610			}
29611		}
29612	}
29613
29614	return nil
29615}
29616
29617// RouteFilterListResult response for the ListRouteFilters API service call.
29618type RouteFilterListResult struct {
29619	autorest.Response `json:"-"`
29620	// Value - A list of route filters in a resource group.
29621	Value *[]RouteFilter `json:"value,omitempty"`
29622	// NextLink - The URL to get the next set of results.
29623	NextLink *string `json:"nextLink,omitempty"`
29624}
29625
29626// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
29627type RouteFilterListResultIterator struct {
29628	i    int
29629	page RouteFilterListResultPage
29630}
29631
29632// NextWithContext advances to the next value.  If there was an error making
29633// the request the iterator does not advance and the error is returned.
29634func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
29635	if tracing.IsEnabled() {
29636		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
29637		defer func() {
29638			sc := -1
29639			if iter.Response().Response.Response != nil {
29640				sc = iter.Response().Response.Response.StatusCode
29641			}
29642			tracing.EndSpan(ctx, sc, err)
29643		}()
29644	}
29645	iter.i++
29646	if iter.i < len(iter.page.Values()) {
29647		return nil
29648	}
29649	err = iter.page.NextWithContext(ctx)
29650	if err != nil {
29651		iter.i--
29652		return err
29653	}
29654	iter.i = 0
29655	return nil
29656}
29657
29658// Next advances to the next value.  If there was an error making
29659// the request the iterator does not advance and the error is returned.
29660// Deprecated: Use NextWithContext() instead.
29661func (iter *RouteFilterListResultIterator) Next() error {
29662	return iter.NextWithContext(context.Background())
29663}
29664
29665// NotDone returns true if the enumeration should be started or is not yet complete.
29666func (iter RouteFilterListResultIterator) NotDone() bool {
29667	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29668}
29669
29670// Response returns the raw server response from the last page request.
29671func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
29672	return iter.page.Response()
29673}
29674
29675// Value returns the current value or a zero-initialized value if the
29676// iterator has advanced beyond the end of the collection.
29677func (iter RouteFilterListResultIterator) Value() RouteFilter {
29678	if !iter.page.NotDone() {
29679		return RouteFilter{}
29680	}
29681	return iter.page.Values()[iter.i]
29682}
29683
29684// Creates a new instance of the RouteFilterListResultIterator type.
29685func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
29686	return RouteFilterListResultIterator{page: page}
29687}
29688
29689// IsEmpty returns true if the ListResult contains no values.
29690func (rflr RouteFilterListResult) IsEmpty() bool {
29691	return rflr.Value == nil || len(*rflr.Value) == 0
29692}
29693
29694// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
29695// It returns nil if no more results exist.
29696func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
29697	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
29698		return nil, nil
29699	}
29700	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29701		autorest.AsJSON(),
29702		autorest.AsGet(),
29703		autorest.WithBaseURL(to.String(rflr.NextLink)))
29704}
29705
29706// RouteFilterListResultPage contains a page of RouteFilter values.
29707type RouteFilterListResultPage struct {
29708	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
29709	rflr RouteFilterListResult
29710}
29711
29712// NextWithContext advances to the next page of values.  If there was an error making
29713// the request the page does not advance and the error is returned.
29714func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
29715	if tracing.IsEnabled() {
29716		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
29717		defer func() {
29718			sc := -1
29719			if page.Response().Response.Response != nil {
29720				sc = page.Response().Response.Response.StatusCode
29721			}
29722			tracing.EndSpan(ctx, sc, err)
29723		}()
29724	}
29725	next, err := page.fn(ctx, page.rflr)
29726	if err != nil {
29727		return err
29728	}
29729	page.rflr = next
29730	return nil
29731}
29732
29733// Next advances to the next page of values.  If there was an error making
29734// the request the page does not advance and the error is returned.
29735// Deprecated: Use NextWithContext() instead.
29736func (page *RouteFilterListResultPage) Next() error {
29737	return page.NextWithContext(context.Background())
29738}
29739
29740// NotDone returns true if the page enumeration should be started or is not yet complete.
29741func (page RouteFilterListResultPage) NotDone() bool {
29742	return !page.rflr.IsEmpty()
29743}
29744
29745// Response returns the raw server response from the last page request.
29746func (page RouteFilterListResultPage) Response() RouteFilterListResult {
29747	return page.rflr
29748}
29749
29750// Values returns the slice of values for the current page or nil if there are no values.
29751func (page RouteFilterListResultPage) Values() []RouteFilter {
29752	if page.rflr.IsEmpty() {
29753		return nil
29754	}
29755	return *page.rflr.Value
29756}
29757
29758// Creates a new instance of the RouteFilterListResultPage type.
29759func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
29760	return RouteFilterListResultPage{fn: getNextPage}
29761}
29762
29763// RouteFilterPropertiesFormat route Filter Resource.
29764type RouteFilterPropertiesFormat struct {
29765	// Rules - Collection of RouteFilterRules contained within a route filter.
29766	Rules *[]RouteFilterRule `json:"rules,omitempty"`
29767	// Peerings - READ-ONLY; A collection of references to express route circuit peerings.
29768	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
29769	// Ipv6Peerings - READ-ONLY; A collection of references to express route circuit ipv6 peerings.
29770	Ipv6Peerings *[]ExpressRouteCircuitPeering `json:"ipv6Peerings,omitempty"`
29771	// ProvisioningState - READ-ONLY; The provisioning state of the route filter resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29772	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29773}
29774
29775// RouteFilterRule route Filter Rule Resource.
29776type RouteFilterRule struct {
29777	autorest.Response `json:"-"`
29778	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
29779	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
29780	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
29781	Name *string `json:"name,omitempty"`
29782	// Location - Resource location.
29783	Location *string `json:"location,omitempty"`
29784	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
29785	Etag *string `json:"etag,omitempty"`
29786	// ID - Resource ID.
29787	ID *string `json:"id,omitempty"`
29788}
29789
29790// MarshalJSON is the custom marshaler for RouteFilterRule.
29791func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
29792	objectMap := make(map[string]interface{})
29793	if rfr.RouteFilterRulePropertiesFormat != nil {
29794		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
29795	}
29796	if rfr.Name != nil {
29797		objectMap["name"] = rfr.Name
29798	}
29799	if rfr.Location != nil {
29800		objectMap["location"] = rfr.Location
29801	}
29802	if rfr.ID != nil {
29803		objectMap["id"] = rfr.ID
29804	}
29805	return json.Marshal(objectMap)
29806}
29807
29808// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
29809func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
29810	var m map[string]*json.RawMessage
29811	err := json.Unmarshal(body, &m)
29812	if err != nil {
29813		return err
29814	}
29815	for k, v := range m {
29816		switch k {
29817		case "properties":
29818			if v != nil {
29819				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
29820				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
29821				if err != nil {
29822					return err
29823				}
29824				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
29825			}
29826		case "name":
29827			if v != nil {
29828				var name string
29829				err = json.Unmarshal(*v, &name)
29830				if err != nil {
29831					return err
29832				}
29833				rfr.Name = &name
29834			}
29835		case "location":
29836			if v != nil {
29837				var location string
29838				err = json.Unmarshal(*v, &location)
29839				if err != nil {
29840					return err
29841				}
29842				rfr.Location = &location
29843			}
29844		case "etag":
29845			if v != nil {
29846				var etag string
29847				err = json.Unmarshal(*v, &etag)
29848				if err != nil {
29849					return err
29850				}
29851				rfr.Etag = &etag
29852			}
29853		case "id":
29854			if v != nil {
29855				var ID string
29856				err = json.Unmarshal(*v, &ID)
29857				if err != nil {
29858					return err
29859				}
29860				rfr.ID = &ID
29861			}
29862		}
29863	}
29864
29865	return nil
29866}
29867
29868// RouteFilterRuleListResult response for the ListRouteFilterRules API service call.
29869type RouteFilterRuleListResult struct {
29870	autorest.Response `json:"-"`
29871	// Value - A list of RouteFilterRules in a resource group.
29872	Value *[]RouteFilterRule `json:"value,omitempty"`
29873	// NextLink - The URL to get the next set of results.
29874	NextLink *string `json:"nextLink,omitempty"`
29875}
29876
29877// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
29878type RouteFilterRuleListResultIterator struct {
29879	i    int
29880	page RouteFilterRuleListResultPage
29881}
29882
29883// NextWithContext advances to the next value.  If there was an error making
29884// the request the iterator does not advance and the error is returned.
29885func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
29886	if tracing.IsEnabled() {
29887		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
29888		defer func() {
29889			sc := -1
29890			if iter.Response().Response.Response != nil {
29891				sc = iter.Response().Response.Response.StatusCode
29892			}
29893			tracing.EndSpan(ctx, sc, err)
29894		}()
29895	}
29896	iter.i++
29897	if iter.i < len(iter.page.Values()) {
29898		return nil
29899	}
29900	err = iter.page.NextWithContext(ctx)
29901	if err != nil {
29902		iter.i--
29903		return err
29904	}
29905	iter.i = 0
29906	return nil
29907}
29908
29909// Next advances to the next value.  If there was an error making
29910// the request the iterator does not advance and the error is returned.
29911// Deprecated: Use NextWithContext() instead.
29912func (iter *RouteFilterRuleListResultIterator) Next() error {
29913	return iter.NextWithContext(context.Background())
29914}
29915
29916// NotDone returns true if the enumeration should be started or is not yet complete.
29917func (iter RouteFilterRuleListResultIterator) NotDone() bool {
29918	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29919}
29920
29921// Response returns the raw server response from the last page request.
29922func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
29923	return iter.page.Response()
29924}
29925
29926// Value returns the current value or a zero-initialized value if the
29927// iterator has advanced beyond the end of the collection.
29928func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
29929	if !iter.page.NotDone() {
29930		return RouteFilterRule{}
29931	}
29932	return iter.page.Values()[iter.i]
29933}
29934
29935// Creates a new instance of the RouteFilterRuleListResultIterator type.
29936func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
29937	return RouteFilterRuleListResultIterator{page: page}
29938}
29939
29940// IsEmpty returns true if the ListResult contains no values.
29941func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
29942	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
29943}
29944
29945// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
29946// It returns nil if no more results exist.
29947func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
29948	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
29949		return nil, nil
29950	}
29951	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29952		autorest.AsJSON(),
29953		autorest.AsGet(),
29954		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
29955}
29956
29957// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
29958type RouteFilterRuleListResultPage struct {
29959	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
29960	rfrlr RouteFilterRuleListResult
29961}
29962
29963// NextWithContext advances to the next page of values.  If there was an error making
29964// the request the page does not advance and the error is returned.
29965func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
29966	if tracing.IsEnabled() {
29967		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
29968		defer func() {
29969			sc := -1
29970			if page.Response().Response.Response != nil {
29971				sc = page.Response().Response.Response.StatusCode
29972			}
29973			tracing.EndSpan(ctx, sc, err)
29974		}()
29975	}
29976	next, err := page.fn(ctx, page.rfrlr)
29977	if err != nil {
29978		return err
29979	}
29980	page.rfrlr = next
29981	return nil
29982}
29983
29984// Next advances to the next page of values.  If there was an error making
29985// the request the page does not advance and the error is returned.
29986// Deprecated: Use NextWithContext() instead.
29987func (page *RouteFilterRuleListResultPage) Next() error {
29988	return page.NextWithContext(context.Background())
29989}
29990
29991// NotDone returns true if the page enumeration should be started or is not yet complete.
29992func (page RouteFilterRuleListResultPage) NotDone() bool {
29993	return !page.rfrlr.IsEmpty()
29994}
29995
29996// Response returns the raw server response from the last page request.
29997func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
29998	return page.rfrlr
29999}
30000
30001// Values returns the slice of values for the current page or nil if there are no values.
30002func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
30003	if page.rfrlr.IsEmpty() {
30004		return nil
30005	}
30006	return *page.rfrlr.Value
30007}
30008
30009// Creates a new instance of the RouteFilterRuleListResultPage type.
30010func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
30011	return RouteFilterRuleListResultPage{fn: getNextPage}
30012}
30013
30014// RouteFilterRulePropertiesFormat route Filter Rule Resource.
30015type RouteFilterRulePropertiesFormat struct {
30016	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
30017	Access Access `json:"access,omitempty"`
30018	// RouteFilterRuleType - The rule type of the rule.
30019	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
30020	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
30021	Communities *[]string `json:"communities,omitempty"`
30022	// ProvisioningState - READ-ONLY; The provisioning state of the route filter rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30023	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30024}
30025
30026// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30027// long-running operation.
30028type RouteFilterRulesCreateOrUpdateFuture struct {
30029	azure.Future
30030}
30031
30032// Result returns the result of the asynchronous operation.
30033// If the operation has not completed it will return an error.
30034func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
30035	var done bool
30036	done, err = future.DoneWithContext(context.Background(), client)
30037	if err != nil {
30038		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30039		return
30040	}
30041	if !done {
30042		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
30043		return
30044	}
30045	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30046	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
30047		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
30048		if err != nil {
30049			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
30050		}
30051	}
30052	return
30053}
30054
30055// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30056// operation.
30057type RouteFilterRulesDeleteFuture struct {
30058	azure.Future
30059}
30060
30061// Result returns the result of the asynchronous operation.
30062// If the operation has not completed it will return an error.
30063func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
30064	var done bool
30065	done, err = future.DoneWithContext(context.Background(), client)
30066	if err != nil {
30067		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
30068		return
30069	}
30070	if !done {
30071		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
30072		return
30073	}
30074	ar.Response = future.Response()
30075	return
30076}
30077
30078// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30079// long-running operation.
30080type RouteFiltersCreateOrUpdateFuture struct {
30081	azure.Future
30082}
30083
30084// Result returns the result of the asynchronous operation.
30085// If the operation has not completed it will return an error.
30086func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
30087	var done bool
30088	done, err = future.DoneWithContext(context.Background(), client)
30089	if err != nil {
30090		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30091		return
30092	}
30093	if !done {
30094		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
30095		return
30096	}
30097	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30098	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
30099		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
30100		if err != nil {
30101			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
30102		}
30103	}
30104	return
30105}
30106
30107// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30108// operation.
30109type RouteFiltersDeleteFuture struct {
30110	azure.Future
30111}
30112
30113// Result returns the result of the asynchronous operation.
30114// If the operation has not completed it will return an error.
30115func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
30116	var done bool
30117	done, err = future.DoneWithContext(context.Background(), client)
30118	if err != nil {
30119		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
30120		return
30121	}
30122	if !done {
30123		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
30124		return
30125	}
30126	ar.Response = future.Response()
30127	return
30128}
30129
30130// RouteListResult response for the ListRoute API service call.
30131type RouteListResult struct {
30132	autorest.Response `json:"-"`
30133	// Value - A list of routes in a resource group.
30134	Value *[]Route `json:"value,omitempty"`
30135	// NextLink - The URL to get the next set of results.
30136	NextLink *string `json:"nextLink,omitempty"`
30137}
30138
30139// RouteListResultIterator provides access to a complete listing of Route values.
30140type RouteListResultIterator struct {
30141	i    int
30142	page RouteListResultPage
30143}
30144
30145// NextWithContext advances to the next value.  If there was an error making
30146// the request the iterator does not advance and the error is returned.
30147func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
30148	if tracing.IsEnabled() {
30149		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
30150		defer func() {
30151			sc := -1
30152			if iter.Response().Response.Response != nil {
30153				sc = iter.Response().Response.Response.StatusCode
30154			}
30155			tracing.EndSpan(ctx, sc, err)
30156		}()
30157	}
30158	iter.i++
30159	if iter.i < len(iter.page.Values()) {
30160		return nil
30161	}
30162	err = iter.page.NextWithContext(ctx)
30163	if err != nil {
30164		iter.i--
30165		return err
30166	}
30167	iter.i = 0
30168	return nil
30169}
30170
30171// Next advances to the next value.  If there was an error making
30172// the request the iterator does not advance and the error is returned.
30173// Deprecated: Use NextWithContext() instead.
30174func (iter *RouteListResultIterator) Next() error {
30175	return iter.NextWithContext(context.Background())
30176}
30177
30178// NotDone returns true if the enumeration should be started or is not yet complete.
30179func (iter RouteListResultIterator) NotDone() bool {
30180	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30181}
30182
30183// Response returns the raw server response from the last page request.
30184func (iter RouteListResultIterator) Response() RouteListResult {
30185	return iter.page.Response()
30186}
30187
30188// Value returns the current value or a zero-initialized value if the
30189// iterator has advanced beyond the end of the collection.
30190func (iter RouteListResultIterator) Value() Route {
30191	if !iter.page.NotDone() {
30192		return Route{}
30193	}
30194	return iter.page.Values()[iter.i]
30195}
30196
30197// Creates a new instance of the RouteListResultIterator type.
30198func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
30199	return RouteListResultIterator{page: page}
30200}
30201
30202// IsEmpty returns true if the ListResult contains no values.
30203func (rlr RouteListResult) IsEmpty() bool {
30204	return rlr.Value == nil || len(*rlr.Value) == 0
30205}
30206
30207// routeListResultPreparer prepares a request to retrieve the next set of results.
30208// It returns nil if no more results exist.
30209func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
30210	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
30211		return nil, nil
30212	}
30213	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30214		autorest.AsJSON(),
30215		autorest.AsGet(),
30216		autorest.WithBaseURL(to.String(rlr.NextLink)))
30217}
30218
30219// RouteListResultPage contains a page of Route values.
30220type RouteListResultPage struct {
30221	fn  func(context.Context, RouteListResult) (RouteListResult, error)
30222	rlr RouteListResult
30223}
30224
30225// NextWithContext advances to the next page of values.  If there was an error making
30226// the request the page does not advance and the error is returned.
30227func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
30228	if tracing.IsEnabled() {
30229		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
30230		defer func() {
30231			sc := -1
30232			if page.Response().Response.Response != nil {
30233				sc = page.Response().Response.Response.StatusCode
30234			}
30235			tracing.EndSpan(ctx, sc, err)
30236		}()
30237	}
30238	next, err := page.fn(ctx, page.rlr)
30239	if err != nil {
30240		return err
30241	}
30242	page.rlr = next
30243	return nil
30244}
30245
30246// Next advances to the next page of values.  If there was an error making
30247// the request the page does not advance and the error is returned.
30248// Deprecated: Use NextWithContext() instead.
30249func (page *RouteListResultPage) Next() error {
30250	return page.NextWithContext(context.Background())
30251}
30252
30253// NotDone returns true if the page enumeration should be started or is not yet complete.
30254func (page RouteListResultPage) NotDone() bool {
30255	return !page.rlr.IsEmpty()
30256}
30257
30258// Response returns the raw server response from the last page request.
30259func (page RouteListResultPage) Response() RouteListResult {
30260	return page.rlr
30261}
30262
30263// Values returns the slice of values for the current page or nil if there are no values.
30264func (page RouteListResultPage) Values() []Route {
30265	if page.rlr.IsEmpty() {
30266		return nil
30267	}
30268	return *page.rlr.Value
30269}
30270
30271// Creates a new instance of the RouteListResultPage type.
30272func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
30273	return RouteListResultPage{fn: getNextPage}
30274}
30275
30276// RoutePropertiesFormat route resource.
30277type RoutePropertiesFormat struct {
30278	// AddressPrefix - The destination CIDR to which the route applies.
30279	AddressPrefix *string `json:"addressPrefix,omitempty"`
30280	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
30281	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
30282	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
30283	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
30284	// ProvisioningState - READ-ONLY; The provisioning state of the route resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30285	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30286}
30287
30288// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
30289// operation.
30290type RoutesCreateOrUpdateFuture struct {
30291	azure.Future
30292}
30293
30294// Result returns the result of the asynchronous operation.
30295// If the operation has not completed it will return an error.
30296func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
30297	var done bool
30298	done, err = future.DoneWithContext(context.Background(), client)
30299	if err != nil {
30300		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30301		return
30302	}
30303	if !done {
30304		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
30305		return
30306	}
30307	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30308	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
30309		r, err = client.CreateOrUpdateResponder(r.Response.Response)
30310		if err != nil {
30311			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
30312		}
30313	}
30314	return
30315}
30316
30317// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
30318type RoutesDeleteFuture struct {
30319	azure.Future
30320}
30321
30322// Result returns the result of the asynchronous operation.
30323// If the operation has not completed it will return an error.
30324func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
30325	var done bool
30326	done, err = future.DoneWithContext(context.Background(), client)
30327	if err != nil {
30328		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
30329		return
30330	}
30331	if !done {
30332		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
30333		return
30334	}
30335	ar.Response = future.Response()
30336	return
30337}
30338
30339// RouteTable route table resource.
30340type RouteTable struct {
30341	autorest.Response `json:"-"`
30342	// RouteTablePropertiesFormat - Properties of the route table.
30343	*RouteTablePropertiesFormat `json:"properties,omitempty"`
30344	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30345	Etag *string `json:"etag,omitempty"`
30346	// ID - Resource ID.
30347	ID *string `json:"id,omitempty"`
30348	// Name - READ-ONLY; Resource name.
30349	Name *string `json:"name,omitempty"`
30350	// Type - READ-ONLY; Resource type.
30351	Type *string `json:"type,omitempty"`
30352	// Location - Resource location.
30353	Location *string `json:"location,omitempty"`
30354	// Tags - Resource tags.
30355	Tags map[string]*string `json:"tags"`
30356}
30357
30358// MarshalJSON is the custom marshaler for RouteTable.
30359func (rt RouteTable) MarshalJSON() ([]byte, error) {
30360	objectMap := make(map[string]interface{})
30361	if rt.RouteTablePropertiesFormat != nil {
30362		objectMap["properties"] = rt.RouteTablePropertiesFormat
30363	}
30364	if rt.ID != nil {
30365		objectMap["id"] = rt.ID
30366	}
30367	if rt.Location != nil {
30368		objectMap["location"] = rt.Location
30369	}
30370	if rt.Tags != nil {
30371		objectMap["tags"] = rt.Tags
30372	}
30373	return json.Marshal(objectMap)
30374}
30375
30376// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
30377func (rt *RouteTable) UnmarshalJSON(body []byte) error {
30378	var m map[string]*json.RawMessage
30379	err := json.Unmarshal(body, &m)
30380	if err != nil {
30381		return err
30382	}
30383	for k, v := range m {
30384		switch k {
30385		case "properties":
30386			if v != nil {
30387				var routeTablePropertiesFormat RouteTablePropertiesFormat
30388				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
30389				if err != nil {
30390					return err
30391				}
30392				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
30393			}
30394		case "etag":
30395			if v != nil {
30396				var etag string
30397				err = json.Unmarshal(*v, &etag)
30398				if err != nil {
30399					return err
30400				}
30401				rt.Etag = &etag
30402			}
30403		case "id":
30404			if v != nil {
30405				var ID string
30406				err = json.Unmarshal(*v, &ID)
30407				if err != nil {
30408					return err
30409				}
30410				rt.ID = &ID
30411			}
30412		case "name":
30413			if v != nil {
30414				var name string
30415				err = json.Unmarshal(*v, &name)
30416				if err != nil {
30417					return err
30418				}
30419				rt.Name = &name
30420			}
30421		case "type":
30422			if v != nil {
30423				var typeVar string
30424				err = json.Unmarshal(*v, &typeVar)
30425				if err != nil {
30426					return err
30427				}
30428				rt.Type = &typeVar
30429			}
30430		case "location":
30431			if v != nil {
30432				var location string
30433				err = json.Unmarshal(*v, &location)
30434				if err != nil {
30435					return err
30436				}
30437				rt.Location = &location
30438			}
30439		case "tags":
30440			if v != nil {
30441				var tags map[string]*string
30442				err = json.Unmarshal(*v, &tags)
30443				if err != nil {
30444					return err
30445				}
30446				rt.Tags = tags
30447			}
30448		}
30449	}
30450
30451	return nil
30452}
30453
30454// RouteTableListResult response for the ListRouteTable API service call.
30455type RouteTableListResult struct {
30456	autorest.Response `json:"-"`
30457	// Value - A list of route tables in a resource group.
30458	Value *[]RouteTable `json:"value,omitempty"`
30459	// NextLink - The URL to get the next set of results.
30460	NextLink *string `json:"nextLink,omitempty"`
30461}
30462
30463// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
30464type RouteTableListResultIterator struct {
30465	i    int
30466	page RouteTableListResultPage
30467}
30468
30469// NextWithContext advances to the next value.  If there was an error making
30470// the request the iterator does not advance and the error is returned.
30471func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
30472	if tracing.IsEnabled() {
30473		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
30474		defer func() {
30475			sc := -1
30476			if iter.Response().Response.Response != nil {
30477				sc = iter.Response().Response.Response.StatusCode
30478			}
30479			tracing.EndSpan(ctx, sc, err)
30480		}()
30481	}
30482	iter.i++
30483	if iter.i < len(iter.page.Values()) {
30484		return nil
30485	}
30486	err = iter.page.NextWithContext(ctx)
30487	if err != nil {
30488		iter.i--
30489		return err
30490	}
30491	iter.i = 0
30492	return nil
30493}
30494
30495// Next advances to the next value.  If there was an error making
30496// the request the iterator does not advance and the error is returned.
30497// Deprecated: Use NextWithContext() instead.
30498func (iter *RouteTableListResultIterator) Next() error {
30499	return iter.NextWithContext(context.Background())
30500}
30501
30502// NotDone returns true if the enumeration should be started or is not yet complete.
30503func (iter RouteTableListResultIterator) NotDone() bool {
30504	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30505}
30506
30507// Response returns the raw server response from the last page request.
30508func (iter RouteTableListResultIterator) Response() RouteTableListResult {
30509	return iter.page.Response()
30510}
30511
30512// Value returns the current value or a zero-initialized value if the
30513// iterator has advanced beyond the end of the collection.
30514func (iter RouteTableListResultIterator) Value() RouteTable {
30515	if !iter.page.NotDone() {
30516		return RouteTable{}
30517	}
30518	return iter.page.Values()[iter.i]
30519}
30520
30521// Creates a new instance of the RouteTableListResultIterator type.
30522func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
30523	return RouteTableListResultIterator{page: page}
30524}
30525
30526// IsEmpty returns true if the ListResult contains no values.
30527func (rtlr RouteTableListResult) IsEmpty() bool {
30528	return rtlr.Value == nil || len(*rtlr.Value) == 0
30529}
30530
30531// routeTableListResultPreparer prepares a request to retrieve the next set of results.
30532// It returns nil if no more results exist.
30533func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
30534	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
30535		return nil, nil
30536	}
30537	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30538		autorest.AsJSON(),
30539		autorest.AsGet(),
30540		autorest.WithBaseURL(to.String(rtlr.NextLink)))
30541}
30542
30543// RouteTableListResultPage contains a page of RouteTable values.
30544type RouteTableListResultPage struct {
30545	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
30546	rtlr RouteTableListResult
30547}
30548
30549// NextWithContext advances to the next page of values.  If there was an error making
30550// the request the page does not advance and the error is returned.
30551func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
30552	if tracing.IsEnabled() {
30553		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
30554		defer func() {
30555			sc := -1
30556			if page.Response().Response.Response != nil {
30557				sc = page.Response().Response.Response.StatusCode
30558			}
30559			tracing.EndSpan(ctx, sc, err)
30560		}()
30561	}
30562	next, err := page.fn(ctx, page.rtlr)
30563	if err != nil {
30564		return err
30565	}
30566	page.rtlr = next
30567	return nil
30568}
30569
30570// Next advances to the next page of values.  If there was an error making
30571// the request the page does not advance and the error is returned.
30572// Deprecated: Use NextWithContext() instead.
30573func (page *RouteTableListResultPage) Next() error {
30574	return page.NextWithContext(context.Background())
30575}
30576
30577// NotDone returns true if the page enumeration should be started or is not yet complete.
30578func (page RouteTableListResultPage) NotDone() bool {
30579	return !page.rtlr.IsEmpty()
30580}
30581
30582// Response returns the raw server response from the last page request.
30583func (page RouteTableListResultPage) Response() RouteTableListResult {
30584	return page.rtlr
30585}
30586
30587// Values returns the slice of values for the current page or nil if there are no values.
30588func (page RouteTableListResultPage) Values() []RouteTable {
30589	if page.rtlr.IsEmpty() {
30590		return nil
30591	}
30592	return *page.rtlr.Value
30593}
30594
30595// Creates a new instance of the RouteTableListResultPage type.
30596func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
30597	return RouteTableListResultPage{fn: getNextPage}
30598}
30599
30600// RouteTablePropertiesFormat route Table resource.
30601type RouteTablePropertiesFormat struct {
30602	// Routes - Collection of routes contained within a route table.
30603	Routes *[]Route `json:"routes,omitempty"`
30604	// Subnets - READ-ONLY; A collection of references to subnets.
30605	Subnets *[]Subnet `json:"subnets,omitempty"`
30606	// DisableBgpRoutePropagation - Whether to disable the routes learned by BGP on that route table. True means disable.
30607	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
30608	// ProvisioningState - READ-ONLY; The provisioning state of the route table resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30609	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30610}
30611
30612// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30613// long-running operation.
30614type RouteTablesCreateOrUpdateFuture struct {
30615	azure.Future
30616}
30617
30618// Result returns the result of the asynchronous operation.
30619// If the operation has not completed it will return an error.
30620func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
30621	var done bool
30622	done, err = future.DoneWithContext(context.Background(), client)
30623	if err != nil {
30624		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30625		return
30626	}
30627	if !done {
30628		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
30629		return
30630	}
30631	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30632	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
30633		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
30634		if err != nil {
30635			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
30636		}
30637	}
30638	return
30639}
30640
30641// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
30642// operation.
30643type RouteTablesDeleteFuture struct {
30644	azure.Future
30645}
30646
30647// Result returns the result of the asynchronous operation.
30648// If the operation has not completed it will return an error.
30649func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
30650	var done bool
30651	done, err = future.DoneWithContext(context.Background(), client)
30652	if err != nil {
30653		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
30654		return
30655	}
30656	if !done {
30657		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
30658		return
30659	}
30660	ar.Response = future.Response()
30661	return
30662}
30663
30664// RoutingConfiguration routing Configuration indicating the associated and propagated route tables for
30665// this connection.
30666type RoutingConfiguration struct {
30667	// AssociatedRouteTable - The resource id RouteTable associated with this RoutingConfiguration.
30668	AssociatedRouteTable *SubResource `json:"associatedRouteTable,omitempty"`
30669	// PropagatedRouteTables - The list of RouteTables to advertise the routes to.
30670	PropagatedRouteTables *PropagatedRouteTable `json:"propagatedRouteTables,omitempty"`
30671	// VnetRoutes - List of routes that control routing from VirtualHub into a virtual network connection.
30672	VnetRoutes *VnetRoute `json:"vnetRoutes,omitempty"`
30673}
30674
30675// Rule rule of type network.
30676type Rule struct {
30677	// IPProtocols - Array of FirewallPolicyRuleNetworkProtocols.
30678	IPProtocols *[]FirewallPolicyRuleNetworkProtocol `json:"ipProtocols,omitempty"`
30679	// SourceAddresses - List of source IP addresses for this rule.
30680	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
30681	// DestinationAddresses - List of destination IP addresses or Service Tags.
30682	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
30683	// DestinationPorts - List of destination ports.
30684	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
30685	// SourceIPGroups - List of source IpGroups for this rule.
30686	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
30687	// DestinationIPGroups - List of destination IpGroups for this rule.
30688	DestinationIPGroups *[]string `json:"destinationIpGroups,omitempty"`
30689	// DestinationFqdns - List of destination FQDNs.
30690	DestinationFqdns *[]string `json:"destinationFqdns,omitempty"`
30691	// Name - Name of the rule.
30692	Name *string `json:"name,omitempty"`
30693	// Description - Description of the rule.
30694	Description *string `json:"description,omitempty"`
30695	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeApplicationRule', 'RuleTypeNatRule', 'RuleTypeNetworkRule'
30696	RuleType RuleType `json:"ruleType,omitempty"`
30697}
30698
30699// MarshalJSON is the custom marshaler for Rule.
30700func (r Rule) MarshalJSON() ([]byte, error) {
30701	r.RuleType = RuleTypeNetworkRule
30702	objectMap := make(map[string]interface{})
30703	if r.IPProtocols != nil {
30704		objectMap["ipProtocols"] = r.IPProtocols
30705	}
30706	if r.SourceAddresses != nil {
30707		objectMap["sourceAddresses"] = r.SourceAddresses
30708	}
30709	if r.DestinationAddresses != nil {
30710		objectMap["destinationAddresses"] = r.DestinationAddresses
30711	}
30712	if r.DestinationPorts != nil {
30713		objectMap["destinationPorts"] = r.DestinationPorts
30714	}
30715	if r.SourceIPGroups != nil {
30716		objectMap["sourceIpGroups"] = r.SourceIPGroups
30717	}
30718	if r.DestinationIPGroups != nil {
30719		objectMap["destinationIpGroups"] = r.DestinationIPGroups
30720	}
30721	if r.DestinationFqdns != nil {
30722		objectMap["destinationFqdns"] = r.DestinationFqdns
30723	}
30724	if r.Name != nil {
30725		objectMap["name"] = r.Name
30726	}
30727	if r.Description != nil {
30728		objectMap["description"] = r.Description
30729	}
30730	if r.RuleType != "" {
30731		objectMap["ruleType"] = r.RuleType
30732	}
30733	return json.Marshal(objectMap)
30734}
30735
30736// AsApplicationRule is the BasicFirewallPolicyRule implementation for Rule.
30737func (r Rule) AsApplicationRule() (*ApplicationRule, bool) {
30738	return nil, false
30739}
30740
30741// AsNatRule is the BasicFirewallPolicyRule implementation for Rule.
30742func (r Rule) AsNatRule() (*NatRule, bool) {
30743	return nil, false
30744}
30745
30746// AsRule is the BasicFirewallPolicyRule implementation for Rule.
30747func (r Rule) AsRule() (*Rule, bool) {
30748	return &r, true
30749}
30750
30751// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for Rule.
30752func (r Rule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
30753	return nil, false
30754}
30755
30756// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for Rule.
30757func (r Rule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
30758	return &r, true
30759}
30760
30761// SecurityGroup networkSecurityGroup resource.
30762type SecurityGroup struct {
30763	autorest.Response `json:"-"`
30764	// SecurityGroupPropertiesFormat - Properties of the network security group.
30765	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
30766	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
30767	Etag *string `json:"etag,omitempty"`
30768	// ID - Resource ID.
30769	ID *string `json:"id,omitempty"`
30770	// Name - READ-ONLY; Resource name.
30771	Name *string `json:"name,omitempty"`
30772	// Type - READ-ONLY; Resource type.
30773	Type *string `json:"type,omitempty"`
30774	// Location - Resource location.
30775	Location *string `json:"location,omitempty"`
30776	// Tags - Resource tags.
30777	Tags map[string]*string `json:"tags"`
30778}
30779
30780// MarshalJSON is the custom marshaler for SecurityGroup.
30781func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
30782	objectMap := make(map[string]interface{})
30783	if sg.SecurityGroupPropertiesFormat != nil {
30784		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
30785	}
30786	if sg.ID != nil {
30787		objectMap["id"] = sg.ID
30788	}
30789	if sg.Location != nil {
30790		objectMap["location"] = sg.Location
30791	}
30792	if sg.Tags != nil {
30793		objectMap["tags"] = sg.Tags
30794	}
30795	return json.Marshal(objectMap)
30796}
30797
30798// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
30799func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
30800	var m map[string]*json.RawMessage
30801	err := json.Unmarshal(body, &m)
30802	if err != nil {
30803		return err
30804	}
30805	for k, v := range m {
30806		switch k {
30807		case "properties":
30808			if v != nil {
30809				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
30810				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
30811				if err != nil {
30812					return err
30813				}
30814				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
30815			}
30816		case "etag":
30817			if v != nil {
30818				var etag string
30819				err = json.Unmarshal(*v, &etag)
30820				if err != nil {
30821					return err
30822				}
30823				sg.Etag = &etag
30824			}
30825		case "id":
30826			if v != nil {
30827				var ID string
30828				err = json.Unmarshal(*v, &ID)
30829				if err != nil {
30830					return err
30831				}
30832				sg.ID = &ID
30833			}
30834		case "name":
30835			if v != nil {
30836				var name string
30837				err = json.Unmarshal(*v, &name)
30838				if err != nil {
30839					return err
30840				}
30841				sg.Name = &name
30842			}
30843		case "type":
30844			if v != nil {
30845				var typeVar string
30846				err = json.Unmarshal(*v, &typeVar)
30847				if err != nil {
30848					return err
30849				}
30850				sg.Type = &typeVar
30851			}
30852		case "location":
30853			if v != nil {
30854				var location string
30855				err = json.Unmarshal(*v, &location)
30856				if err != nil {
30857					return err
30858				}
30859				sg.Location = &location
30860			}
30861		case "tags":
30862			if v != nil {
30863				var tags map[string]*string
30864				err = json.Unmarshal(*v, &tags)
30865				if err != nil {
30866					return err
30867				}
30868				sg.Tags = tags
30869			}
30870		}
30871	}
30872
30873	return nil
30874}
30875
30876// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
30877type SecurityGroupListResult struct {
30878	autorest.Response `json:"-"`
30879	// Value - A list of NetworkSecurityGroup resources.
30880	Value *[]SecurityGroup `json:"value,omitempty"`
30881	// NextLink - The URL to get the next set of results.
30882	NextLink *string `json:"nextLink,omitempty"`
30883}
30884
30885// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
30886type SecurityGroupListResultIterator struct {
30887	i    int
30888	page SecurityGroupListResultPage
30889}
30890
30891// NextWithContext advances to the next value.  If there was an error making
30892// the request the iterator does not advance and the error is returned.
30893func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
30894	if tracing.IsEnabled() {
30895		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
30896		defer func() {
30897			sc := -1
30898			if iter.Response().Response.Response != nil {
30899				sc = iter.Response().Response.Response.StatusCode
30900			}
30901			tracing.EndSpan(ctx, sc, err)
30902		}()
30903	}
30904	iter.i++
30905	if iter.i < len(iter.page.Values()) {
30906		return nil
30907	}
30908	err = iter.page.NextWithContext(ctx)
30909	if err != nil {
30910		iter.i--
30911		return err
30912	}
30913	iter.i = 0
30914	return nil
30915}
30916
30917// Next advances to the next value.  If there was an error making
30918// the request the iterator does not advance and the error is returned.
30919// Deprecated: Use NextWithContext() instead.
30920func (iter *SecurityGroupListResultIterator) Next() error {
30921	return iter.NextWithContext(context.Background())
30922}
30923
30924// NotDone returns true if the enumeration should be started or is not yet complete.
30925func (iter SecurityGroupListResultIterator) NotDone() bool {
30926	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30927}
30928
30929// Response returns the raw server response from the last page request.
30930func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
30931	return iter.page.Response()
30932}
30933
30934// Value returns the current value or a zero-initialized value if the
30935// iterator has advanced beyond the end of the collection.
30936func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
30937	if !iter.page.NotDone() {
30938		return SecurityGroup{}
30939	}
30940	return iter.page.Values()[iter.i]
30941}
30942
30943// Creates a new instance of the SecurityGroupListResultIterator type.
30944func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
30945	return SecurityGroupListResultIterator{page: page}
30946}
30947
30948// IsEmpty returns true if the ListResult contains no values.
30949func (sglr SecurityGroupListResult) IsEmpty() bool {
30950	return sglr.Value == nil || len(*sglr.Value) == 0
30951}
30952
30953// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
30954// It returns nil if no more results exist.
30955func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
30956	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
30957		return nil, nil
30958	}
30959	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30960		autorest.AsJSON(),
30961		autorest.AsGet(),
30962		autorest.WithBaseURL(to.String(sglr.NextLink)))
30963}
30964
30965// SecurityGroupListResultPage contains a page of SecurityGroup values.
30966type SecurityGroupListResultPage struct {
30967	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
30968	sglr SecurityGroupListResult
30969}
30970
30971// NextWithContext advances to the next page of values.  If there was an error making
30972// the request the page does not advance and the error is returned.
30973func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
30974	if tracing.IsEnabled() {
30975		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
30976		defer func() {
30977			sc := -1
30978			if page.Response().Response.Response != nil {
30979				sc = page.Response().Response.Response.StatusCode
30980			}
30981			tracing.EndSpan(ctx, sc, err)
30982		}()
30983	}
30984	next, err := page.fn(ctx, page.sglr)
30985	if err != nil {
30986		return err
30987	}
30988	page.sglr = next
30989	return nil
30990}
30991
30992// Next advances to the next page of values.  If there was an error making
30993// the request the page does not advance and the error is returned.
30994// Deprecated: Use NextWithContext() instead.
30995func (page *SecurityGroupListResultPage) Next() error {
30996	return page.NextWithContext(context.Background())
30997}
30998
30999// NotDone returns true if the page enumeration should be started or is not yet complete.
31000func (page SecurityGroupListResultPage) NotDone() bool {
31001	return !page.sglr.IsEmpty()
31002}
31003
31004// Response returns the raw server response from the last page request.
31005func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
31006	return page.sglr
31007}
31008
31009// Values returns the slice of values for the current page or nil if there are no values.
31010func (page SecurityGroupListResultPage) Values() []SecurityGroup {
31011	if page.sglr.IsEmpty() {
31012		return nil
31013	}
31014	return *page.sglr.Value
31015}
31016
31017// Creates a new instance of the SecurityGroupListResultPage type.
31018func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
31019	return SecurityGroupListResultPage{fn: getNextPage}
31020}
31021
31022// SecurityGroupNetworkInterface network interface and all its associated security rules.
31023type SecurityGroupNetworkInterface struct {
31024	// ID - ID of the network interface.
31025	ID *string `json:"id,omitempty"`
31026	// SecurityRuleAssociations - All security rules associated with the network interface.
31027	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
31028}
31029
31030// SecurityGroupPropertiesFormat network Security Group resource.
31031type SecurityGroupPropertiesFormat struct {
31032	// SecurityRules - A collection of security rules of the network security group.
31033	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
31034	// DefaultSecurityRules - READ-ONLY; The default security rules of network security group.
31035	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
31036	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
31037	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
31038	// Subnets - READ-ONLY; A collection of references to subnets.
31039	Subnets *[]Subnet `json:"subnets,omitempty"`
31040	// FlowLogs - READ-ONLY; A collection of references to flow log resources.
31041	FlowLogs *[]FlowLog `json:"flowLogs,omitempty"`
31042	// ResourceGUID - READ-ONLY; The resource GUID property of the network security group resource.
31043	ResourceGUID *string `json:"resourceGuid,omitempty"`
31044	// ProvisioningState - READ-ONLY; The provisioning state of the network security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31045	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31046}
31047
31048// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
31049type SecurityGroupResult struct {
31050	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
31051	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
31052	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
31053	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
31054}
31055
31056// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31057// long-running operation.
31058type SecurityGroupsCreateOrUpdateFuture struct {
31059	azure.Future
31060}
31061
31062// Result returns the result of the asynchronous operation.
31063// If the operation has not completed it will return an error.
31064func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
31065	var done bool
31066	done, err = future.DoneWithContext(context.Background(), client)
31067	if err != nil {
31068		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31069		return
31070	}
31071	if !done {
31072		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
31073		return
31074	}
31075	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31076	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
31077		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
31078		if err != nil {
31079			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
31080		}
31081	}
31082	return
31083}
31084
31085// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
31086// operation.
31087type SecurityGroupsDeleteFuture struct {
31088	azure.Future
31089}
31090
31091// Result returns the result of the asynchronous operation.
31092// If the operation has not completed it will return an error.
31093func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
31094	var done bool
31095	done, err = future.DoneWithContext(context.Background(), client)
31096	if err != nil {
31097		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
31098		return
31099	}
31100	if !done {
31101		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
31102		return
31103	}
31104	ar.Response = future.Response()
31105	return
31106}
31107
31108// SecurityGroupViewParameters parameters that define the VM to check security groups for.
31109type SecurityGroupViewParameters struct {
31110	// TargetResourceID - ID of the target VM.
31111	TargetResourceID *string `json:"targetResourceId,omitempty"`
31112}
31113
31114// SecurityGroupViewResult the information about security rules applied to the specified VM.
31115type SecurityGroupViewResult struct {
31116	autorest.Response `json:"-"`
31117	// NetworkInterfaces - List of network interfaces on the specified VM.
31118	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
31119}
31120
31121// SecurityPartnerProvider security Partner Provider resource.
31122type SecurityPartnerProvider struct {
31123	autorest.Response `json:"-"`
31124	// SecurityPartnerProviderPropertiesFormat - Properties of the Security Partner Provider.
31125	*SecurityPartnerProviderPropertiesFormat `json:"properties,omitempty"`
31126	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
31127	Etag *string `json:"etag,omitempty"`
31128	// ID - Resource ID.
31129	ID *string `json:"id,omitempty"`
31130	// Name - READ-ONLY; Resource name.
31131	Name *string `json:"name,omitempty"`
31132	// Type - READ-ONLY; Resource type.
31133	Type *string `json:"type,omitempty"`
31134	// Location - Resource location.
31135	Location *string `json:"location,omitempty"`
31136	// Tags - Resource tags.
31137	Tags map[string]*string `json:"tags"`
31138}
31139
31140// MarshalJSON is the custom marshaler for SecurityPartnerProvider.
31141func (spp SecurityPartnerProvider) MarshalJSON() ([]byte, error) {
31142	objectMap := make(map[string]interface{})
31143	if spp.SecurityPartnerProviderPropertiesFormat != nil {
31144		objectMap["properties"] = spp.SecurityPartnerProviderPropertiesFormat
31145	}
31146	if spp.ID != nil {
31147		objectMap["id"] = spp.ID
31148	}
31149	if spp.Location != nil {
31150		objectMap["location"] = spp.Location
31151	}
31152	if spp.Tags != nil {
31153		objectMap["tags"] = spp.Tags
31154	}
31155	return json.Marshal(objectMap)
31156}
31157
31158// UnmarshalJSON is the custom unmarshaler for SecurityPartnerProvider struct.
31159func (spp *SecurityPartnerProvider) UnmarshalJSON(body []byte) error {
31160	var m map[string]*json.RawMessage
31161	err := json.Unmarshal(body, &m)
31162	if err != nil {
31163		return err
31164	}
31165	for k, v := range m {
31166		switch k {
31167		case "properties":
31168			if v != nil {
31169				var securityPartnerProviderPropertiesFormat SecurityPartnerProviderPropertiesFormat
31170				err = json.Unmarshal(*v, &securityPartnerProviderPropertiesFormat)
31171				if err != nil {
31172					return err
31173				}
31174				spp.SecurityPartnerProviderPropertiesFormat = &securityPartnerProviderPropertiesFormat
31175			}
31176		case "etag":
31177			if v != nil {
31178				var etag string
31179				err = json.Unmarshal(*v, &etag)
31180				if err != nil {
31181					return err
31182				}
31183				spp.Etag = &etag
31184			}
31185		case "id":
31186			if v != nil {
31187				var ID string
31188				err = json.Unmarshal(*v, &ID)
31189				if err != nil {
31190					return err
31191				}
31192				spp.ID = &ID
31193			}
31194		case "name":
31195			if v != nil {
31196				var name string
31197				err = json.Unmarshal(*v, &name)
31198				if err != nil {
31199					return err
31200				}
31201				spp.Name = &name
31202			}
31203		case "type":
31204			if v != nil {
31205				var typeVar string
31206				err = json.Unmarshal(*v, &typeVar)
31207				if err != nil {
31208					return err
31209				}
31210				spp.Type = &typeVar
31211			}
31212		case "location":
31213			if v != nil {
31214				var location string
31215				err = json.Unmarshal(*v, &location)
31216				if err != nil {
31217					return err
31218				}
31219				spp.Location = &location
31220			}
31221		case "tags":
31222			if v != nil {
31223				var tags map[string]*string
31224				err = json.Unmarshal(*v, &tags)
31225				if err != nil {
31226					return err
31227				}
31228				spp.Tags = tags
31229			}
31230		}
31231	}
31232
31233	return nil
31234}
31235
31236// SecurityPartnerProviderListResult response for ListSecurityPartnerProviders API service call.
31237type SecurityPartnerProviderListResult struct {
31238	autorest.Response `json:"-"`
31239	// Value - List of Security Partner Providers in a resource group.
31240	Value *[]SecurityPartnerProvider `json:"value,omitempty"`
31241	// NextLink - URL to get the next set of results.
31242	NextLink *string `json:"nextLink,omitempty"`
31243}
31244
31245// SecurityPartnerProviderListResultIterator provides access to a complete listing of
31246// SecurityPartnerProvider values.
31247type SecurityPartnerProviderListResultIterator struct {
31248	i    int
31249	page SecurityPartnerProviderListResultPage
31250}
31251
31252// NextWithContext advances to the next value.  If there was an error making
31253// the request the iterator does not advance and the error is returned.
31254func (iter *SecurityPartnerProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
31255	if tracing.IsEnabled() {
31256		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityPartnerProviderListResultIterator.NextWithContext")
31257		defer func() {
31258			sc := -1
31259			if iter.Response().Response.Response != nil {
31260				sc = iter.Response().Response.Response.StatusCode
31261			}
31262			tracing.EndSpan(ctx, sc, err)
31263		}()
31264	}
31265	iter.i++
31266	if iter.i < len(iter.page.Values()) {
31267		return nil
31268	}
31269	err = iter.page.NextWithContext(ctx)
31270	if err != nil {
31271		iter.i--
31272		return err
31273	}
31274	iter.i = 0
31275	return nil
31276}
31277
31278// Next advances to the next value.  If there was an error making
31279// the request the iterator does not advance and the error is returned.
31280// Deprecated: Use NextWithContext() instead.
31281func (iter *SecurityPartnerProviderListResultIterator) Next() error {
31282	return iter.NextWithContext(context.Background())
31283}
31284
31285// NotDone returns true if the enumeration should be started or is not yet complete.
31286func (iter SecurityPartnerProviderListResultIterator) NotDone() bool {
31287	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31288}
31289
31290// Response returns the raw server response from the last page request.
31291func (iter SecurityPartnerProviderListResultIterator) Response() SecurityPartnerProviderListResult {
31292	return iter.page.Response()
31293}
31294
31295// Value returns the current value or a zero-initialized value if the
31296// iterator has advanced beyond the end of the collection.
31297func (iter SecurityPartnerProviderListResultIterator) Value() SecurityPartnerProvider {
31298	if !iter.page.NotDone() {
31299		return SecurityPartnerProvider{}
31300	}
31301	return iter.page.Values()[iter.i]
31302}
31303
31304// Creates a new instance of the SecurityPartnerProviderListResultIterator type.
31305func NewSecurityPartnerProviderListResultIterator(page SecurityPartnerProviderListResultPage) SecurityPartnerProviderListResultIterator {
31306	return SecurityPartnerProviderListResultIterator{page: page}
31307}
31308
31309// IsEmpty returns true if the ListResult contains no values.
31310func (spplr SecurityPartnerProviderListResult) IsEmpty() bool {
31311	return spplr.Value == nil || len(*spplr.Value) == 0
31312}
31313
31314// securityPartnerProviderListResultPreparer prepares a request to retrieve the next set of results.
31315// It returns nil if no more results exist.
31316func (spplr SecurityPartnerProviderListResult) securityPartnerProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
31317	if spplr.NextLink == nil || len(to.String(spplr.NextLink)) < 1 {
31318		return nil, nil
31319	}
31320	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31321		autorest.AsJSON(),
31322		autorest.AsGet(),
31323		autorest.WithBaseURL(to.String(spplr.NextLink)))
31324}
31325
31326// SecurityPartnerProviderListResultPage contains a page of SecurityPartnerProvider values.
31327type SecurityPartnerProviderListResultPage struct {
31328	fn    func(context.Context, SecurityPartnerProviderListResult) (SecurityPartnerProviderListResult, error)
31329	spplr SecurityPartnerProviderListResult
31330}
31331
31332// NextWithContext advances to the next page of values.  If there was an error making
31333// the request the page does not advance and the error is returned.
31334func (page *SecurityPartnerProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
31335	if tracing.IsEnabled() {
31336		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityPartnerProviderListResultPage.NextWithContext")
31337		defer func() {
31338			sc := -1
31339			if page.Response().Response.Response != nil {
31340				sc = page.Response().Response.Response.StatusCode
31341			}
31342			tracing.EndSpan(ctx, sc, err)
31343		}()
31344	}
31345	next, err := page.fn(ctx, page.spplr)
31346	if err != nil {
31347		return err
31348	}
31349	page.spplr = next
31350	return nil
31351}
31352
31353// Next advances to the next page of values.  If there was an error making
31354// the request the page does not advance and the error is returned.
31355// Deprecated: Use NextWithContext() instead.
31356func (page *SecurityPartnerProviderListResultPage) Next() error {
31357	return page.NextWithContext(context.Background())
31358}
31359
31360// NotDone returns true if the page enumeration should be started or is not yet complete.
31361func (page SecurityPartnerProviderListResultPage) NotDone() bool {
31362	return !page.spplr.IsEmpty()
31363}
31364
31365// Response returns the raw server response from the last page request.
31366func (page SecurityPartnerProviderListResultPage) Response() SecurityPartnerProviderListResult {
31367	return page.spplr
31368}
31369
31370// Values returns the slice of values for the current page or nil if there are no values.
31371func (page SecurityPartnerProviderListResultPage) Values() []SecurityPartnerProvider {
31372	if page.spplr.IsEmpty() {
31373		return nil
31374	}
31375	return *page.spplr.Value
31376}
31377
31378// Creates a new instance of the SecurityPartnerProviderListResultPage type.
31379func NewSecurityPartnerProviderListResultPage(getNextPage func(context.Context, SecurityPartnerProviderListResult) (SecurityPartnerProviderListResult, error)) SecurityPartnerProviderListResultPage {
31380	return SecurityPartnerProviderListResultPage{fn: getNextPage}
31381}
31382
31383// SecurityPartnerProviderPropertiesFormat properties of the Security Partner Provider.
31384type SecurityPartnerProviderPropertiesFormat struct {
31385	// ProvisioningState - READ-ONLY; The provisioning state of the Security Partner Provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31386	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31387	// SecurityProviderName - The security provider name. Possible values include: 'ZScaler', 'IBoss', 'Checkpoint'
31388	SecurityProviderName SecurityProviderName `json:"securityProviderName,omitempty"`
31389	// ConnectionStatus - READ-ONLY; The connection status with the Security Partner Provider. Possible values include: 'SecurityPartnerProviderConnectionStatusUnknown', 'SecurityPartnerProviderConnectionStatusPartiallyConnected', 'SecurityPartnerProviderConnectionStatusConnected', 'SecurityPartnerProviderConnectionStatusNotConnected'
31390	ConnectionStatus SecurityPartnerProviderConnectionStatus `json:"connectionStatus,omitempty"`
31391	// VirtualHub - The virtualHub to which the Security Partner Provider belongs.
31392	VirtualHub *SubResource `json:"virtualHub,omitempty"`
31393}
31394
31395// SecurityPartnerProvidersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
31396// a long-running operation.
31397type SecurityPartnerProvidersCreateOrUpdateFuture struct {
31398	azure.Future
31399}
31400
31401// Result returns the result of the asynchronous operation.
31402// If the operation has not completed it will return an error.
31403func (future *SecurityPartnerProvidersCreateOrUpdateFuture) Result(client SecurityPartnerProvidersClient) (spp SecurityPartnerProvider, err error) {
31404	var done bool
31405	done, err = future.DoneWithContext(context.Background(), client)
31406	if err != nil {
31407		err = autorest.NewErrorWithError(err, "network.SecurityPartnerProvidersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31408		return
31409	}
31410	if !done {
31411		err = azure.NewAsyncOpIncompleteError("network.SecurityPartnerProvidersCreateOrUpdateFuture")
31412		return
31413	}
31414	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31415	if spp.Response.Response, err = future.GetResult(sender); err == nil && spp.Response.Response.StatusCode != http.StatusNoContent {
31416		spp, err = client.CreateOrUpdateResponder(spp.Response.Response)
31417		if err != nil {
31418			err = autorest.NewErrorWithError(err, "network.SecurityPartnerProvidersCreateOrUpdateFuture", "Result", spp.Response.Response, "Failure responding to request")
31419		}
31420	}
31421	return
31422}
31423
31424// SecurityPartnerProvidersDeleteFuture an abstraction for monitoring and retrieving the results of a
31425// long-running operation.
31426type SecurityPartnerProvidersDeleteFuture struct {
31427	azure.Future
31428}
31429
31430// Result returns the result of the asynchronous operation.
31431// If the operation has not completed it will return an error.
31432func (future *SecurityPartnerProvidersDeleteFuture) Result(client SecurityPartnerProvidersClient) (ar autorest.Response, err error) {
31433	var done bool
31434	done, err = future.DoneWithContext(context.Background(), client)
31435	if err != nil {
31436		err = autorest.NewErrorWithError(err, "network.SecurityPartnerProvidersDeleteFuture", "Result", future.Response(), "Polling failure")
31437		return
31438	}
31439	if !done {
31440		err = azure.NewAsyncOpIncompleteError("network.SecurityPartnerProvidersDeleteFuture")
31441		return
31442	}
31443	ar.Response = future.Response()
31444	return
31445}
31446
31447// SecurityRule network security rule.
31448type SecurityRule struct {
31449	autorest.Response `json:"-"`
31450	// SecurityRulePropertiesFormat - Properties of the security rule.
31451	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
31452	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
31453	Name *string `json:"name,omitempty"`
31454	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
31455	Etag *string `json:"etag,omitempty"`
31456	// ID - Resource ID.
31457	ID *string `json:"id,omitempty"`
31458}
31459
31460// MarshalJSON is the custom marshaler for SecurityRule.
31461func (sr SecurityRule) MarshalJSON() ([]byte, error) {
31462	objectMap := make(map[string]interface{})
31463	if sr.SecurityRulePropertiesFormat != nil {
31464		objectMap["properties"] = sr.SecurityRulePropertiesFormat
31465	}
31466	if sr.Name != nil {
31467		objectMap["name"] = sr.Name
31468	}
31469	if sr.ID != nil {
31470		objectMap["id"] = sr.ID
31471	}
31472	return json.Marshal(objectMap)
31473}
31474
31475// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
31476func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
31477	var m map[string]*json.RawMessage
31478	err := json.Unmarshal(body, &m)
31479	if err != nil {
31480		return err
31481	}
31482	for k, v := range m {
31483		switch k {
31484		case "properties":
31485			if v != nil {
31486				var securityRulePropertiesFormat SecurityRulePropertiesFormat
31487				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
31488				if err != nil {
31489					return err
31490				}
31491				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
31492			}
31493		case "name":
31494			if v != nil {
31495				var name string
31496				err = json.Unmarshal(*v, &name)
31497				if err != nil {
31498					return err
31499				}
31500				sr.Name = &name
31501			}
31502		case "etag":
31503			if v != nil {
31504				var etag string
31505				err = json.Unmarshal(*v, &etag)
31506				if err != nil {
31507					return err
31508				}
31509				sr.Etag = &etag
31510			}
31511		case "id":
31512			if v != nil {
31513				var ID string
31514				err = json.Unmarshal(*v, &ID)
31515				if err != nil {
31516					return err
31517				}
31518				sr.ID = &ID
31519			}
31520		}
31521	}
31522
31523	return nil
31524}
31525
31526// SecurityRuleAssociations all security rules associated with the network interface.
31527type SecurityRuleAssociations struct {
31528	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
31529	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
31530	// SubnetAssociation - Subnet and it's custom security rules.
31531	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
31532	// DefaultSecurityRules - Collection of default security rules of the network security group.
31533	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
31534	// EffectiveSecurityRules - Collection of effective security rules.
31535	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
31536}
31537
31538// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
31539// belongs to a network security group.
31540type SecurityRuleListResult struct {
31541	autorest.Response `json:"-"`
31542	// Value - The security rules in a network security group.
31543	Value *[]SecurityRule `json:"value,omitempty"`
31544	// NextLink - The URL to get the next set of results.
31545	NextLink *string `json:"nextLink,omitempty"`
31546}
31547
31548// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
31549type SecurityRuleListResultIterator struct {
31550	i    int
31551	page SecurityRuleListResultPage
31552}
31553
31554// NextWithContext advances to the next value.  If there was an error making
31555// the request the iterator does not advance and the error is returned.
31556func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
31557	if tracing.IsEnabled() {
31558		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
31559		defer func() {
31560			sc := -1
31561			if iter.Response().Response.Response != nil {
31562				sc = iter.Response().Response.Response.StatusCode
31563			}
31564			tracing.EndSpan(ctx, sc, err)
31565		}()
31566	}
31567	iter.i++
31568	if iter.i < len(iter.page.Values()) {
31569		return nil
31570	}
31571	err = iter.page.NextWithContext(ctx)
31572	if err != nil {
31573		iter.i--
31574		return err
31575	}
31576	iter.i = 0
31577	return nil
31578}
31579
31580// Next advances to the next value.  If there was an error making
31581// the request the iterator does not advance and the error is returned.
31582// Deprecated: Use NextWithContext() instead.
31583func (iter *SecurityRuleListResultIterator) Next() error {
31584	return iter.NextWithContext(context.Background())
31585}
31586
31587// NotDone returns true if the enumeration should be started or is not yet complete.
31588func (iter SecurityRuleListResultIterator) NotDone() bool {
31589	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31590}
31591
31592// Response returns the raw server response from the last page request.
31593func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
31594	return iter.page.Response()
31595}
31596
31597// Value returns the current value or a zero-initialized value if the
31598// iterator has advanced beyond the end of the collection.
31599func (iter SecurityRuleListResultIterator) Value() SecurityRule {
31600	if !iter.page.NotDone() {
31601		return SecurityRule{}
31602	}
31603	return iter.page.Values()[iter.i]
31604}
31605
31606// Creates a new instance of the SecurityRuleListResultIterator type.
31607func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
31608	return SecurityRuleListResultIterator{page: page}
31609}
31610
31611// IsEmpty returns true if the ListResult contains no values.
31612func (srlr SecurityRuleListResult) IsEmpty() bool {
31613	return srlr.Value == nil || len(*srlr.Value) == 0
31614}
31615
31616// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
31617// It returns nil if no more results exist.
31618func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
31619	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
31620		return nil, nil
31621	}
31622	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31623		autorest.AsJSON(),
31624		autorest.AsGet(),
31625		autorest.WithBaseURL(to.String(srlr.NextLink)))
31626}
31627
31628// SecurityRuleListResultPage contains a page of SecurityRule values.
31629type SecurityRuleListResultPage struct {
31630	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
31631	srlr SecurityRuleListResult
31632}
31633
31634// NextWithContext advances to the next page of values.  If there was an error making
31635// the request the page does not advance and the error is returned.
31636func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
31637	if tracing.IsEnabled() {
31638		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
31639		defer func() {
31640			sc := -1
31641			if page.Response().Response.Response != nil {
31642				sc = page.Response().Response.Response.StatusCode
31643			}
31644			tracing.EndSpan(ctx, sc, err)
31645		}()
31646	}
31647	next, err := page.fn(ctx, page.srlr)
31648	if err != nil {
31649		return err
31650	}
31651	page.srlr = next
31652	return nil
31653}
31654
31655// Next advances to the next page of values.  If there was an error making
31656// the request the page does not advance and the error is returned.
31657// Deprecated: Use NextWithContext() instead.
31658func (page *SecurityRuleListResultPage) Next() error {
31659	return page.NextWithContext(context.Background())
31660}
31661
31662// NotDone returns true if the page enumeration should be started or is not yet complete.
31663func (page SecurityRuleListResultPage) NotDone() bool {
31664	return !page.srlr.IsEmpty()
31665}
31666
31667// Response returns the raw server response from the last page request.
31668func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
31669	return page.srlr
31670}
31671
31672// Values returns the slice of values for the current page or nil if there are no values.
31673func (page SecurityRuleListResultPage) Values() []SecurityRule {
31674	if page.srlr.IsEmpty() {
31675		return nil
31676	}
31677	return *page.srlr.Value
31678}
31679
31680// Creates a new instance of the SecurityRuleListResultPage type.
31681func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
31682	return SecurityRuleListResultPage{fn: getNextPage}
31683}
31684
31685// SecurityRulePropertiesFormat security rule resource.
31686type SecurityRulePropertiesFormat struct {
31687	// Description - A description for this rule. Restricted to 140 chars.
31688	Description *string `json:"description,omitempty"`
31689	// Protocol - Network protocol this rule applies to. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk', 'SecurityRuleProtocolAh'
31690	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
31691	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
31692	SourcePortRange *string `json:"sourcePortRange,omitempty"`
31693	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
31694	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
31695	// SourceAddressPrefix - The CIDR or source IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from.
31696	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
31697	// SourceAddressPrefixes - The CIDR or source IP ranges.
31698	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
31699	// SourceApplicationSecurityGroups - The application security group specified as source.
31700	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
31701	// DestinationAddressPrefix - The destination address prefix. CIDR or destination IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used.
31702	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
31703	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
31704	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
31705	// DestinationApplicationSecurityGroups - The application security group specified as destination.
31706	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
31707	// SourcePortRanges - The source port ranges.
31708	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
31709	// DestinationPortRanges - The destination port ranges.
31710	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
31711	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
31712	Access SecurityRuleAccess `json:"access,omitempty"`
31713	// Priority - The priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule.
31714	Priority *int32 `json:"priority,omitempty"`
31715	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
31716	Direction SecurityRuleDirection `json:"direction,omitempty"`
31717	// ProvisioningState - READ-ONLY; The provisioning state of the security rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31718	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31719}
31720
31721// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31722// long-running operation.
31723type SecurityRulesCreateOrUpdateFuture struct {
31724	azure.Future
31725}
31726
31727// Result returns the result of the asynchronous operation.
31728// If the operation has not completed it will return an error.
31729func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
31730	var done bool
31731	done, err = future.DoneWithContext(context.Background(), client)
31732	if err != nil {
31733		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31734		return
31735	}
31736	if !done {
31737		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
31738		return
31739	}
31740	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31741	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
31742		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
31743		if err != nil {
31744			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
31745		}
31746	}
31747	return
31748}
31749
31750// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
31751// operation.
31752type SecurityRulesDeleteFuture struct {
31753	azure.Future
31754}
31755
31756// Result returns the result of the asynchronous operation.
31757// If the operation has not completed it will return an error.
31758func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
31759	var done bool
31760	done, err = future.DoneWithContext(context.Background(), client)
31761	if err != nil {
31762		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
31763		return
31764	}
31765	if !done {
31766		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
31767		return
31768	}
31769	ar.Response = future.Response()
31770	return
31771}
31772
31773// SecurityRulesEvaluationResult network security rules evaluation result.
31774type SecurityRulesEvaluationResult struct {
31775	// Name - Name of the network security rule.
31776	Name *string `json:"name,omitempty"`
31777	// ProtocolMatched - Value indicating whether protocol is matched.
31778	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
31779	// SourceMatched - Value indicating whether source is matched.
31780	SourceMatched *bool `json:"sourceMatched,omitempty"`
31781	// SourcePortMatched - Value indicating whether source port is matched.
31782	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
31783	// DestinationMatched - Value indicating whether destination is matched.
31784	DestinationMatched *bool `json:"destinationMatched,omitempty"`
31785	// DestinationPortMatched - Value indicating whether destination port is matched.
31786	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
31787}
31788
31789// ServiceAssociationLink serviceAssociationLink resource.
31790type ServiceAssociationLink struct {
31791	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
31792	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
31793	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
31794	Name *string `json:"name,omitempty"`
31795	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
31796	Etag *string `json:"etag,omitempty"`
31797	// Type - READ-ONLY; Resource type.
31798	Type *string `json:"type,omitempty"`
31799	// ID - Resource ID.
31800	ID *string `json:"id,omitempty"`
31801}
31802
31803// MarshalJSON is the custom marshaler for ServiceAssociationLink.
31804func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
31805	objectMap := make(map[string]interface{})
31806	if sal.ServiceAssociationLinkPropertiesFormat != nil {
31807		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
31808	}
31809	if sal.Name != nil {
31810		objectMap["name"] = sal.Name
31811	}
31812	if sal.ID != nil {
31813		objectMap["id"] = sal.ID
31814	}
31815	return json.Marshal(objectMap)
31816}
31817
31818// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
31819func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
31820	var m map[string]*json.RawMessage
31821	err := json.Unmarshal(body, &m)
31822	if err != nil {
31823		return err
31824	}
31825	for k, v := range m {
31826		switch k {
31827		case "properties":
31828			if v != nil {
31829				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
31830				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
31831				if err != nil {
31832					return err
31833				}
31834				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
31835			}
31836		case "name":
31837			if v != nil {
31838				var name string
31839				err = json.Unmarshal(*v, &name)
31840				if err != nil {
31841					return err
31842				}
31843				sal.Name = &name
31844			}
31845		case "etag":
31846			if v != nil {
31847				var etag string
31848				err = json.Unmarshal(*v, &etag)
31849				if err != nil {
31850					return err
31851				}
31852				sal.Etag = &etag
31853			}
31854		case "type":
31855			if v != nil {
31856				var typeVar string
31857				err = json.Unmarshal(*v, &typeVar)
31858				if err != nil {
31859					return err
31860				}
31861				sal.Type = &typeVar
31862			}
31863		case "id":
31864			if v != nil {
31865				var ID string
31866				err = json.Unmarshal(*v, &ID)
31867				if err != nil {
31868					return err
31869				}
31870				sal.ID = &ID
31871			}
31872		}
31873	}
31874
31875	return nil
31876}
31877
31878// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
31879type ServiceAssociationLinkPropertiesFormat struct {
31880	// LinkedResourceType - Resource type of the linked resource.
31881	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
31882	// Link - Link to the external resource.
31883	Link *string `json:"link,omitempty"`
31884	// ProvisioningState - READ-ONLY; The provisioning state of the service association link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31885	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31886	// AllowDelete - If true, the resource can be deleted.
31887	AllowDelete *bool `json:"allowDelete,omitempty"`
31888	// Locations - A list of locations.
31889	Locations *[]string `json:"locations,omitempty"`
31890}
31891
31892// ServiceAssociationLinksListResult response for ServiceAssociationLinks_List operation.
31893type ServiceAssociationLinksListResult struct {
31894	autorest.Response `json:"-"`
31895	// Value - The service association links in a subnet.
31896	Value *[]ServiceAssociationLink `json:"value,omitempty"`
31897	// NextLink - READ-ONLY; The URL to get the next set of results.
31898	NextLink *string `json:"nextLink,omitempty"`
31899}
31900
31901// ServiceDelegationPropertiesFormat properties of a service delegation.
31902type ServiceDelegationPropertiesFormat struct {
31903	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).
31904	ServiceName *string `json:"serviceName,omitempty"`
31905	// Actions - READ-ONLY; The actions permitted to the service upon delegation.
31906	Actions *[]string `json:"actions,omitempty"`
31907	// ProvisioningState - READ-ONLY; The provisioning state of the service delegation resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31908	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31909}
31910
31911// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
31912// a long-running operation.
31913type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
31914	azure.Future
31915}
31916
31917// Result returns the result of the asynchronous operation.
31918// If the operation has not completed it will return an error.
31919func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
31920	var done bool
31921	done, err = future.DoneWithContext(context.Background(), client)
31922	if err != nil {
31923		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31924		return
31925	}
31926	if !done {
31927		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
31928		return
31929	}
31930	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31931	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
31932		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
31933		if err != nil {
31934			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
31935		}
31936	}
31937	return
31938}
31939
31940// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
31941// long-running operation.
31942type ServiceEndpointPoliciesDeleteFuture struct {
31943	azure.Future
31944}
31945
31946// Result returns the result of the asynchronous operation.
31947// If the operation has not completed it will return an error.
31948func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
31949	var done bool
31950	done, err = future.DoneWithContext(context.Background(), client)
31951	if err != nil {
31952		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
31953		return
31954	}
31955	if !done {
31956		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
31957		return
31958	}
31959	ar.Response = future.Response()
31960	return
31961}
31962
31963// ServiceEndpointPolicy service End point policy resource.
31964type ServiceEndpointPolicy struct {
31965	autorest.Response `json:"-"`
31966	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy.
31967	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
31968	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
31969	Etag *string `json:"etag,omitempty"`
31970	// ID - Resource ID.
31971	ID *string `json:"id,omitempty"`
31972	// Name - READ-ONLY; Resource name.
31973	Name *string `json:"name,omitempty"`
31974	// Type - READ-ONLY; Resource type.
31975	Type *string `json:"type,omitempty"`
31976	// Location - Resource location.
31977	Location *string `json:"location,omitempty"`
31978	// Tags - Resource tags.
31979	Tags map[string]*string `json:"tags"`
31980}
31981
31982// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
31983func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
31984	objectMap := make(map[string]interface{})
31985	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
31986		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
31987	}
31988	if sep.ID != nil {
31989		objectMap["id"] = sep.ID
31990	}
31991	if sep.Location != nil {
31992		objectMap["location"] = sep.Location
31993	}
31994	if sep.Tags != nil {
31995		objectMap["tags"] = sep.Tags
31996	}
31997	return json.Marshal(objectMap)
31998}
31999
32000// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
32001func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
32002	var m map[string]*json.RawMessage
32003	err := json.Unmarshal(body, &m)
32004	if err != nil {
32005		return err
32006	}
32007	for k, v := range m {
32008		switch k {
32009		case "properties":
32010			if v != nil {
32011				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
32012				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
32013				if err != nil {
32014					return err
32015				}
32016				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
32017			}
32018		case "etag":
32019			if v != nil {
32020				var etag string
32021				err = json.Unmarshal(*v, &etag)
32022				if err != nil {
32023					return err
32024				}
32025				sep.Etag = &etag
32026			}
32027		case "id":
32028			if v != nil {
32029				var ID string
32030				err = json.Unmarshal(*v, &ID)
32031				if err != nil {
32032					return err
32033				}
32034				sep.ID = &ID
32035			}
32036		case "name":
32037			if v != nil {
32038				var name string
32039				err = json.Unmarshal(*v, &name)
32040				if err != nil {
32041					return err
32042				}
32043				sep.Name = &name
32044			}
32045		case "type":
32046			if v != nil {
32047				var typeVar string
32048				err = json.Unmarshal(*v, &typeVar)
32049				if err != nil {
32050					return err
32051				}
32052				sep.Type = &typeVar
32053			}
32054		case "location":
32055			if v != nil {
32056				var location string
32057				err = json.Unmarshal(*v, &location)
32058				if err != nil {
32059					return err
32060				}
32061				sep.Location = &location
32062			}
32063		case "tags":
32064			if v != nil {
32065				var tags map[string]*string
32066				err = json.Unmarshal(*v, &tags)
32067				if err != nil {
32068					return err
32069				}
32070				sep.Tags = tags
32071			}
32072		}
32073	}
32074
32075	return nil
32076}
32077
32078// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
32079type ServiceEndpointPolicyDefinition struct {
32080	autorest.Response `json:"-"`
32081	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition.
32082	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
32083	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32084	Name *string `json:"name,omitempty"`
32085	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32086	Etag *string `json:"etag,omitempty"`
32087	// ID - Resource ID.
32088	ID *string `json:"id,omitempty"`
32089}
32090
32091// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
32092func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
32093	objectMap := make(map[string]interface{})
32094	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
32095		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
32096	}
32097	if sepd.Name != nil {
32098		objectMap["name"] = sepd.Name
32099	}
32100	if sepd.ID != nil {
32101		objectMap["id"] = sepd.ID
32102	}
32103	return json.Marshal(objectMap)
32104}
32105
32106// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
32107func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
32108	var m map[string]*json.RawMessage
32109	err := json.Unmarshal(body, &m)
32110	if err != nil {
32111		return err
32112	}
32113	for k, v := range m {
32114		switch k {
32115		case "properties":
32116			if v != nil {
32117				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
32118				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
32119				if err != nil {
32120					return err
32121				}
32122				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
32123			}
32124		case "name":
32125			if v != nil {
32126				var name string
32127				err = json.Unmarshal(*v, &name)
32128				if err != nil {
32129					return err
32130				}
32131				sepd.Name = &name
32132			}
32133		case "etag":
32134			if v != nil {
32135				var etag string
32136				err = json.Unmarshal(*v, &etag)
32137				if err != nil {
32138					return err
32139				}
32140				sepd.Etag = &etag
32141			}
32142		case "id":
32143			if v != nil {
32144				var ID string
32145				err = json.Unmarshal(*v, &ID)
32146				if err != nil {
32147					return err
32148				}
32149				sepd.ID = &ID
32150			}
32151		}
32152	}
32153
32154	return nil
32155}
32156
32157// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
32158// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
32159type ServiceEndpointPolicyDefinitionListResult struct {
32160	autorest.Response `json:"-"`
32161	// Value - The service endpoint policy definition in a service endpoint policy.
32162	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
32163	// NextLink - The URL to get the next set of results.
32164	NextLink *string `json:"nextLink,omitempty"`
32165}
32166
32167// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
32168// ServiceEndpointPolicyDefinition values.
32169type ServiceEndpointPolicyDefinitionListResultIterator struct {
32170	i    int
32171	page ServiceEndpointPolicyDefinitionListResultPage
32172}
32173
32174// NextWithContext advances to the next value.  If there was an error making
32175// the request the iterator does not advance and the error is returned.
32176func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
32177	if tracing.IsEnabled() {
32178		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
32179		defer func() {
32180			sc := -1
32181			if iter.Response().Response.Response != nil {
32182				sc = iter.Response().Response.Response.StatusCode
32183			}
32184			tracing.EndSpan(ctx, sc, err)
32185		}()
32186	}
32187	iter.i++
32188	if iter.i < len(iter.page.Values()) {
32189		return nil
32190	}
32191	err = iter.page.NextWithContext(ctx)
32192	if err != nil {
32193		iter.i--
32194		return err
32195	}
32196	iter.i = 0
32197	return nil
32198}
32199
32200// Next advances to the next value.  If there was an error making
32201// the request the iterator does not advance and the error is returned.
32202// Deprecated: Use NextWithContext() instead.
32203func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
32204	return iter.NextWithContext(context.Background())
32205}
32206
32207// NotDone returns true if the enumeration should be started or is not yet complete.
32208func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
32209	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32210}
32211
32212// Response returns the raw server response from the last page request.
32213func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
32214	return iter.page.Response()
32215}
32216
32217// Value returns the current value or a zero-initialized value if the
32218// iterator has advanced beyond the end of the collection.
32219func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
32220	if !iter.page.NotDone() {
32221		return ServiceEndpointPolicyDefinition{}
32222	}
32223	return iter.page.Values()[iter.i]
32224}
32225
32226// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
32227func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
32228	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
32229}
32230
32231// IsEmpty returns true if the ListResult contains no values.
32232func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
32233	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
32234}
32235
32236// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
32237// It returns nil if no more results exist.
32238func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
32239	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
32240		return nil, nil
32241	}
32242	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32243		autorest.AsJSON(),
32244		autorest.AsGet(),
32245		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
32246}
32247
32248// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
32249type ServiceEndpointPolicyDefinitionListResultPage struct {
32250	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
32251	sepdlr ServiceEndpointPolicyDefinitionListResult
32252}
32253
32254// NextWithContext advances to the next page of values.  If there was an error making
32255// the request the page does not advance and the error is returned.
32256func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
32257	if tracing.IsEnabled() {
32258		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
32259		defer func() {
32260			sc := -1
32261			if page.Response().Response.Response != nil {
32262				sc = page.Response().Response.Response.StatusCode
32263			}
32264			tracing.EndSpan(ctx, sc, err)
32265		}()
32266	}
32267	next, err := page.fn(ctx, page.sepdlr)
32268	if err != nil {
32269		return err
32270	}
32271	page.sepdlr = next
32272	return nil
32273}
32274
32275// Next advances to the next page of values.  If there was an error making
32276// the request the page does not advance and the error is returned.
32277// Deprecated: Use NextWithContext() instead.
32278func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
32279	return page.NextWithContext(context.Background())
32280}
32281
32282// NotDone returns true if the page enumeration should be started or is not yet complete.
32283func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
32284	return !page.sepdlr.IsEmpty()
32285}
32286
32287// Response returns the raw server response from the last page request.
32288func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
32289	return page.sepdlr
32290}
32291
32292// Values returns the slice of values for the current page or nil if there are no values.
32293func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
32294	if page.sepdlr.IsEmpty() {
32295		return nil
32296	}
32297	return *page.sepdlr.Value
32298}
32299
32300// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
32301func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
32302	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
32303}
32304
32305// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
32306type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
32307	// Description - A description for this rule. Restricted to 140 chars.
32308	Description *string `json:"description,omitempty"`
32309	// Service - Service endpoint name.
32310	Service *string `json:"service,omitempty"`
32311	// ServiceResources - A list of service resources.
32312	ServiceResources *[]string `json:"serviceResources,omitempty"`
32313	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy definition resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32314	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32315}
32316
32317// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
32318// results of a long-running operation.
32319type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
32320	azure.Future
32321}
32322
32323// Result returns the result of the asynchronous operation.
32324// If the operation has not completed it will return an error.
32325func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
32326	var done bool
32327	done, err = future.DoneWithContext(context.Background(), client)
32328	if err != nil {
32329		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32330		return
32331	}
32332	if !done {
32333		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
32334		return
32335	}
32336	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32337	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
32338		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
32339		if err != nil {
32340			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
32341		}
32342	}
32343	return
32344}
32345
32346// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
32347// a long-running operation.
32348type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
32349	azure.Future
32350}
32351
32352// Result returns the result of the asynchronous operation.
32353// If the operation has not completed it will return an error.
32354func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
32355	var done bool
32356	done, err = future.DoneWithContext(context.Background(), client)
32357	if err != nil {
32358		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
32359		return
32360	}
32361	if !done {
32362		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
32363		return
32364	}
32365	ar.Response = future.Response()
32366	return
32367}
32368
32369// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
32370type ServiceEndpointPolicyListResult struct {
32371	autorest.Response `json:"-"`
32372	// Value - A list of ServiceEndpointPolicy resources.
32373	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
32374	// NextLink - READ-ONLY; The URL to get the next set of results.
32375	NextLink *string `json:"nextLink,omitempty"`
32376}
32377
32378// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
32379// values.
32380type ServiceEndpointPolicyListResultIterator struct {
32381	i    int
32382	page ServiceEndpointPolicyListResultPage
32383}
32384
32385// NextWithContext advances to the next value.  If there was an error making
32386// the request the iterator does not advance and the error is returned.
32387func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
32388	if tracing.IsEnabled() {
32389		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
32390		defer func() {
32391			sc := -1
32392			if iter.Response().Response.Response != nil {
32393				sc = iter.Response().Response.Response.StatusCode
32394			}
32395			tracing.EndSpan(ctx, sc, err)
32396		}()
32397	}
32398	iter.i++
32399	if iter.i < len(iter.page.Values()) {
32400		return nil
32401	}
32402	err = iter.page.NextWithContext(ctx)
32403	if err != nil {
32404		iter.i--
32405		return err
32406	}
32407	iter.i = 0
32408	return nil
32409}
32410
32411// Next advances to the next value.  If there was an error making
32412// the request the iterator does not advance and the error is returned.
32413// Deprecated: Use NextWithContext() instead.
32414func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
32415	return iter.NextWithContext(context.Background())
32416}
32417
32418// NotDone returns true if the enumeration should be started or is not yet complete.
32419func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
32420	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32421}
32422
32423// Response returns the raw server response from the last page request.
32424func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
32425	return iter.page.Response()
32426}
32427
32428// Value returns the current value or a zero-initialized value if the
32429// iterator has advanced beyond the end of the collection.
32430func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
32431	if !iter.page.NotDone() {
32432		return ServiceEndpointPolicy{}
32433	}
32434	return iter.page.Values()[iter.i]
32435}
32436
32437// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
32438func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
32439	return ServiceEndpointPolicyListResultIterator{page: page}
32440}
32441
32442// IsEmpty returns true if the ListResult contains no values.
32443func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
32444	return seplr.Value == nil || len(*seplr.Value) == 0
32445}
32446
32447// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
32448// It returns nil if no more results exist.
32449func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
32450	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
32451		return nil, nil
32452	}
32453	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32454		autorest.AsJSON(),
32455		autorest.AsGet(),
32456		autorest.WithBaseURL(to.String(seplr.NextLink)))
32457}
32458
32459// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
32460type ServiceEndpointPolicyListResultPage struct {
32461	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
32462	seplr ServiceEndpointPolicyListResult
32463}
32464
32465// NextWithContext advances to the next page of values.  If there was an error making
32466// the request the page does not advance and the error is returned.
32467func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
32468	if tracing.IsEnabled() {
32469		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
32470		defer func() {
32471			sc := -1
32472			if page.Response().Response.Response != nil {
32473				sc = page.Response().Response.Response.StatusCode
32474			}
32475			tracing.EndSpan(ctx, sc, err)
32476		}()
32477	}
32478	next, err := page.fn(ctx, page.seplr)
32479	if err != nil {
32480		return err
32481	}
32482	page.seplr = next
32483	return nil
32484}
32485
32486// Next advances to the next page of values.  If there was an error making
32487// the request the page does not advance and the error is returned.
32488// Deprecated: Use NextWithContext() instead.
32489func (page *ServiceEndpointPolicyListResultPage) Next() error {
32490	return page.NextWithContext(context.Background())
32491}
32492
32493// NotDone returns true if the page enumeration should be started or is not yet complete.
32494func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
32495	return !page.seplr.IsEmpty()
32496}
32497
32498// Response returns the raw server response from the last page request.
32499func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
32500	return page.seplr
32501}
32502
32503// Values returns the slice of values for the current page or nil if there are no values.
32504func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
32505	if page.seplr.IsEmpty() {
32506		return nil
32507	}
32508	return *page.seplr.Value
32509}
32510
32511// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
32512func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
32513	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
32514}
32515
32516// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
32517type ServiceEndpointPolicyPropertiesFormat struct {
32518	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
32519	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
32520	// Subnets - READ-ONLY; A collection of references to subnets.
32521	Subnets *[]Subnet `json:"subnets,omitempty"`
32522	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
32523	ResourceGUID *string `json:"resourceGuid,omitempty"`
32524	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32525	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32526}
32527
32528// ServiceEndpointPropertiesFormat the service endpoint properties.
32529type ServiceEndpointPropertiesFormat struct {
32530	// Service - The type of the endpoint service.
32531	Service *string `json:"service,omitempty"`
32532	// Locations - A list of locations.
32533	Locations *[]string `json:"locations,omitempty"`
32534	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32535	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32536}
32537
32538// ServiceTagInformation the service tag information.
32539type ServiceTagInformation struct {
32540	// Properties - READ-ONLY; Properties of the service tag information.
32541	Properties *ServiceTagInformationPropertiesFormat `json:"properties,omitempty"`
32542	// Name - READ-ONLY; The name of service tag.
32543	Name *string `json:"name,omitempty"`
32544	// ID - READ-ONLY; The ID of service tag.
32545	ID *string `json:"id,omitempty"`
32546}
32547
32548// ServiceTagInformationPropertiesFormat properties of the service tag information.
32549type ServiceTagInformationPropertiesFormat struct {
32550	// ChangeNumber - READ-ONLY; The iteration number of service tag.
32551	ChangeNumber *string `json:"changeNumber,omitempty"`
32552	// Region - READ-ONLY; The region of service tag.
32553	Region *string `json:"region,omitempty"`
32554	// SystemService - READ-ONLY; The name of system service.
32555	SystemService *string `json:"systemService,omitempty"`
32556	// AddressPrefixes - READ-ONLY; The list of IP address prefixes.
32557	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
32558}
32559
32560// ServiceTagsListResult response for the ListServiceTags API service call.
32561type ServiceTagsListResult struct {
32562	autorest.Response `json:"-"`
32563	// Name - READ-ONLY; The name of the cloud.
32564	Name *string `json:"name,omitempty"`
32565	// ID - READ-ONLY; The ID of the cloud.
32566	ID *string `json:"id,omitempty"`
32567	// Type - READ-ONLY; The azure resource type.
32568	Type *string `json:"type,omitempty"`
32569	// ChangeNumber - READ-ONLY; The iteration number.
32570	ChangeNumber *string `json:"changeNumber,omitempty"`
32571	// Cloud - READ-ONLY; The name of the cloud.
32572	Cloud *string `json:"cloud,omitempty"`
32573	// Values - READ-ONLY; The list of service tag information resources.
32574	Values *[]ServiceTagInformation `json:"values,omitempty"`
32575}
32576
32577// SessionIds list of session IDs.
32578type SessionIds struct {
32579	// SessionIds - List of session IDs.
32580	SessionIds *[]string `json:"sessionIds,omitempty"`
32581}
32582
32583// StaticRoute list of all Static Routes.
32584type StaticRoute struct {
32585	// Name - The name of the StaticRoute that is unique within a VnetRoute.
32586	Name *string `json:"name,omitempty"`
32587	// AddressPrefixes - List of all address prefixes.
32588	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
32589	// NextHopIPAddress - The ip address of the next hop.
32590	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
32591}
32592
32593// String ...
32594type String struct {
32595	autorest.Response `json:"-"`
32596	Value             *string `json:"value,omitempty"`
32597}
32598
32599// Subnet subnet in a virtual network resource.
32600type Subnet struct {
32601	autorest.Response `json:"-"`
32602	// SubnetPropertiesFormat - Properties of the subnet.
32603	*SubnetPropertiesFormat `json:"properties,omitempty"`
32604	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32605	Name *string `json:"name,omitempty"`
32606	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32607	Etag *string `json:"etag,omitempty"`
32608	// ID - Resource ID.
32609	ID *string `json:"id,omitempty"`
32610}
32611
32612// MarshalJSON is the custom marshaler for Subnet.
32613func (s Subnet) MarshalJSON() ([]byte, error) {
32614	objectMap := make(map[string]interface{})
32615	if s.SubnetPropertiesFormat != nil {
32616		objectMap["properties"] = s.SubnetPropertiesFormat
32617	}
32618	if s.Name != nil {
32619		objectMap["name"] = s.Name
32620	}
32621	if s.ID != nil {
32622		objectMap["id"] = s.ID
32623	}
32624	return json.Marshal(objectMap)
32625}
32626
32627// UnmarshalJSON is the custom unmarshaler for Subnet struct.
32628func (s *Subnet) UnmarshalJSON(body []byte) error {
32629	var m map[string]*json.RawMessage
32630	err := json.Unmarshal(body, &m)
32631	if err != nil {
32632		return err
32633	}
32634	for k, v := range m {
32635		switch k {
32636		case "properties":
32637			if v != nil {
32638				var subnetPropertiesFormat SubnetPropertiesFormat
32639				err = json.Unmarshal(*v, &subnetPropertiesFormat)
32640				if err != nil {
32641					return err
32642				}
32643				s.SubnetPropertiesFormat = &subnetPropertiesFormat
32644			}
32645		case "name":
32646			if v != nil {
32647				var name string
32648				err = json.Unmarshal(*v, &name)
32649				if err != nil {
32650					return err
32651				}
32652				s.Name = &name
32653			}
32654		case "etag":
32655			if v != nil {
32656				var etag string
32657				err = json.Unmarshal(*v, &etag)
32658				if err != nil {
32659					return err
32660				}
32661				s.Etag = &etag
32662			}
32663		case "id":
32664			if v != nil {
32665				var ID string
32666				err = json.Unmarshal(*v, &ID)
32667				if err != nil {
32668					return err
32669				}
32670				s.ID = &ID
32671			}
32672		}
32673	}
32674
32675	return nil
32676}
32677
32678// SubnetAssociation subnet and it's custom security rules.
32679type SubnetAssociation struct {
32680	// ID - READ-ONLY; Subnet ID.
32681	ID *string `json:"id,omitempty"`
32682	// SecurityRules - Collection of custom security rules.
32683	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
32684}
32685
32686// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
32687// network.
32688type SubnetListResult struct {
32689	autorest.Response `json:"-"`
32690	// Value - The subnets in a virtual network.
32691	Value *[]Subnet `json:"value,omitempty"`
32692	// NextLink - The URL to get the next set of results.
32693	NextLink *string `json:"nextLink,omitempty"`
32694}
32695
32696// SubnetListResultIterator provides access to a complete listing of Subnet values.
32697type SubnetListResultIterator struct {
32698	i    int
32699	page SubnetListResultPage
32700}
32701
32702// NextWithContext advances to the next value.  If there was an error making
32703// the request the iterator does not advance and the error is returned.
32704func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
32705	if tracing.IsEnabled() {
32706		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
32707		defer func() {
32708			sc := -1
32709			if iter.Response().Response.Response != nil {
32710				sc = iter.Response().Response.Response.StatusCode
32711			}
32712			tracing.EndSpan(ctx, sc, err)
32713		}()
32714	}
32715	iter.i++
32716	if iter.i < len(iter.page.Values()) {
32717		return nil
32718	}
32719	err = iter.page.NextWithContext(ctx)
32720	if err != nil {
32721		iter.i--
32722		return err
32723	}
32724	iter.i = 0
32725	return nil
32726}
32727
32728// Next advances to the next value.  If there was an error making
32729// the request the iterator does not advance and the error is returned.
32730// Deprecated: Use NextWithContext() instead.
32731func (iter *SubnetListResultIterator) Next() error {
32732	return iter.NextWithContext(context.Background())
32733}
32734
32735// NotDone returns true if the enumeration should be started or is not yet complete.
32736func (iter SubnetListResultIterator) NotDone() bool {
32737	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32738}
32739
32740// Response returns the raw server response from the last page request.
32741func (iter SubnetListResultIterator) Response() SubnetListResult {
32742	return iter.page.Response()
32743}
32744
32745// Value returns the current value or a zero-initialized value if the
32746// iterator has advanced beyond the end of the collection.
32747func (iter SubnetListResultIterator) Value() Subnet {
32748	if !iter.page.NotDone() {
32749		return Subnet{}
32750	}
32751	return iter.page.Values()[iter.i]
32752}
32753
32754// Creates a new instance of the SubnetListResultIterator type.
32755func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
32756	return SubnetListResultIterator{page: page}
32757}
32758
32759// IsEmpty returns true if the ListResult contains no values.
32760func (slr SubnetListResult) IsEmpty() bool {
32761	return slr.Value == nil || len(*slr.Value) == 0
32762}
32763
32764// subnetListResultPreparer prepares a request to retrieve the next set of results.
32765// It returns nil if no more results exist.
32766func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
32767	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
32768		return nil, nil
32769	}
32770	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32771		autorest.AsJSON(),
32772		autorest.AsGet(),
32773		autorest.WithBaseURL(to.String(slr.NextLink)))
32774}
32775
32776// SubnetListResultPage contains a page of Subnet values.
32777type SubnetListResultPage struct {
32778	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
32779	slr SubnetListResult
32780}
32781
32782// NextWithContext advances to the next page of values.  If there was an error making
32783// the request the page does not advance and the error is returned.
32784func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
32785	if tracing.IsEnabled() {
32786		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
32787		defer func() {
32788			sc := -1
32789			if page.Response().Response.Response != nil {
32790				sc = page.Response().Response.Response.StatusCode
32791			}
32792			tracing.EndSpan(ctx, sc, err)
32793		}()
32794	}
32795	next, err := page.fn(ctx, page.slr)
32796	if err != nil {
32797		return err
32798	}
32799	page.slr = next
32800	return nil
32801}
32802
32803// Next advances to the next page of values.  If there was an error making
32804// the request the page does not advance and the error is returned.
32805// Deprecated: Use NextWithContext() instead.
32806func (page *SubnetListResultPage) Next() error {
32807	return page.NextWithContext(context.Background())
32808}
32809
32810// NotDone returns true if the page enumeration should be started or is not yet complete.
32811func (page SubnetListResultPage) NotDone() bool {
32812	return !page.slr.IsEmpty()
32813}
32814
32815// Response returns the raw server response from the last page request.
32816func (page SubnetListResultPage) Response() SubnetListResult {
32817	return page.slr
32818}
32819
32820// Values returns the slice of values for the current page or nil if there are no values.
32821func (page SubnetListResultPage) Values() []Subnet {
32822	if page.slr.IsEmpty() {
32823		return nil
32824	}
32825	return *page.slr.Value
32826}
32827
32828// Creates a new instance of the SubnetListResultPage type.
32829func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
32830	return SubnetListResultPage{fn: getNextPage}
32831}
32832
32833// SubnetPropertiesFormat properties of the subnet.
32834type SubnetPropertiesFormat struct {
32835	// AddressPrefix - The address prefix for the subnet.
32836	AddressPrefix *string `json:"addressPrefix,omitempty"`
32837	// AddressPrefixes - List of address prefixes for the subnet.
32838	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
32839	// NetworkSecurityGroup - The reference to the NetworkSecurityGroup resource.
32840	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
32841	// RouteTable - The reference to the RouteTable resource.
32842	RouteTable *RouteTable `json:"routeTable,omitempty"`
32843	// NatGateway - Nat gateway associated with this subnet.
32844	NatGateway *SubResource `json:"natGateway,omitempty"`
32845	// ServiceEndpoints - An array of service endpoints.
32846	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
32847	// ServiceEndpointPolicies - An array of service endpoint policies.
32848	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
32849	// PrivateEndpoints - READ-ONLY; An array of references to private endpoints.
32850	PrivateEndpoints *[]PrivateEndpoint `json:"privateEndpoints,omitempty"`
32851	// IPConfigurations - READ-ONLY; An array of references to the network interface IP configurations using subnet.
32852	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
32853	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
32854	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
32855	// IPAllocations - Array of IpAllocation which reference this subnet.
32856	IPAllocations *[]SubResource `json:"ipAllocations,omitempty"`
32857	// ResourceNavigationLinks - READ-ONLY; An array of references to the external resources using subnet.
32858	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
32859	// ServiceAssociationLinks - READ-ONLY; An array of references to services injecting into this subnet.
32860	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
32861	// Delegations - An array of references to the delegations on the subnet.
32862	Delegations *[]Delegation `json:"delegations,omitempty"`
32863	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
32864	Purpose *string `json:"purpose,omitempty"`
32865	// ProvisioningState - READ-ONLY; The provisioning state of the subnet resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32866	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32867	// PrivateEndpointNetworkPolicies - Enable or Disable apply network policies on private end point in the subnet.
32868	PrivateEndpointNetworkPolicies *string `json:"privateEndpointNetworkPolicies,omitempty"`
32869	// PrivateLinkServiceNetworkPolicies - Enable or Disable apply network policies on private link service in the subnet.
32870	PrivateLinkServiceNetworkPolicies *string `json:"privateLinkServiceNetworkPolicies,omitempty"`
32871}
32872
32873// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
32874// operation.
32875type SubnetsCreateOrUpdateFuture struct {
32876	azure.Future
32877}
32878
32879// Result returns the result of the asynchronous operation.
32880// If the operation has not completed it will return an error.
32881func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
32882	var done bool
32883	done, err = future.DoneWithContext(context.Background(), client)
32884	if err != nil {
32885		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32886		return
32887	}
32888	if !done {
32889		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
32890		return
32891	}
32892	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32893	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
32894		s, err = client.CreateOrUpdateResponder(s.Response.Response)
32895		if err != nil {
32896			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
32897		}
32898	}
32899	return
32900}
32901
32902// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
32903// operation.
32904type SubnetsDeleteFuture struct {
32905	azure.Future
32906}
32907
32908// Result returns the result of the asynchronous operation.
32909// If the operation has not completed it will return an error.
32910func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
32911	var done bool
32912	done, err = future.DoneWithContext(context.Background(), client)
32913	if err != nil {
32914		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
32915		return
32916	}
32917	if !done {
32918		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
32919		return
32920	}
32921	ar.Response = future.Response()
32922	return
32923}
32924
32925// SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
32926// long-running operation.
32927type SubnetsPrepareNetworkPoliciesFuture struct {
32928	azure.Future
32929}
32930
32931// Result returns the result of the asynchronous operation.
32932// If the operation has not completed it will return an error.
32933func (future *SubnetsPrepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
32934	var done bool
32935	done, err = future.DoneWithContext(context.Background(), client)
32936	if err != nil {
32937		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
32938		return
32939	}
32940	if !done {
32941		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
32942		return
32943	}
32944	ar.Response = future.Response()
32945	return
32946}
32947
32948// SubnetsUnprepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
32949// long-running operation.
32950type SubnetsUnprepareNetworkPoliciesFuture struct {
32951	azure.Future
32952}
32953
32954// Result returns the result of the asynchronous operation.
32955// If the operation has not completed it will return an error.
32956func (future *SubnetsUnprepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
32957	var done bool
32958	done, err = future.DoneWithContext(context.Background(), client)
32959	if err != nil {
32960		err = autorest.NewErrorWithError(err, "network.SubnetsUnprepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
32961		return
32962	}
32963	if !done {
32964		err = azure.NewAsyncOpIncompleteError("network.SubnetsUnprepareNetworkPoliciesFuture")
32965		return
32966	}
32967	ar.Response = future.Response()
32968	return
32969}
32970
32971// SubResource reference to another subresource.
32972type SubResource struct {
32973	// ID - Resource ID.
32974	ID *string `json:"id,omitempty"`
32975}
32976
32977// TagsObject tags object for patch operations.
32978type TagsObject struct {
32979	// Tags - Resource tags.
32980	Tags map[string]*string `json:"tags"`
32981}
32982
32983// MarshalJSON is the custom marshaler for TagsObject.
32984func (toVar TagsObject) MarshalJSON() ([]byte, error) {
32985	objectMap := make(map[string]interface{})
32986	if toVar.Tags != nil {
32987		objectMap["tags"] = toVar.Tags
32988	}
32989	return json.Marshal(objectMap)
32990}
32991
32992// Topology topology of the specified resource group.
32993type Topology struct {
32994	autorest.Response `json:"-"`
32995	// ID - READ-ONLY; GUID representing the operation id.
32996	ID *string `json:"id,omitempty"`
32997	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
32998	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
32999	// LastModified - READ-ONLY; The datetime when the topology was last modified.
33000	LastModified *date.Time `json:"lastModified,omitempty"`
33001	// Resources - A list of topology resources.
33002	Resources *[]TopologyResource `json:"resources,omitempty"`
33003}
33004
33005// TopologyAssociation resources that have an association with the parent resource.
33006type TopologyAssociation struct {
33007	// Name - The name of the resource that is associated with the parent resource.
33008	Name *string `json:"name,omitempty"`
33009	// ResourceID - The ID of the resource that is associated with the parent resource.
33010	ResourceID *string `json:"resourceId,omitempty"`
33011	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
33012	AssociationType AssociationType `json:"associationType,omitempty"`
33013}
33014
33015// TopologyParameters parameters that define the representation of topology.
33016type TopologyParameters struct {
33017	// TargetResourceGroupName - The name of the target resource group to perform topology on.
33018	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
33019	// TargetVirtualNetwork - The reference to the Virtual Network resource.
33020	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
33021	// TargetSubnet - The reference to the Subnet resource.
33022	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
33023}
33024
33025// TopologyResource the network resource topology information for the given resource group.
33026type TopologyResource struct {
33027	// Name - Name of the resource.
33028	Name *string `json:"name,omitempty"`
33029	// ID - ID of the resource.
33030	ID *string `json:"id,omitempty"`
33031	// Location - Resource location.
33032	Location *string `json:"location,omitempty"`
33033	// Associations - Holds the associations the resource has with other resources in the resource group.
33034	Associations *[]TopologyAssociation `json:"associations,omitempty"`
33035}
33036
33037// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
33038type TrafficAnalyticsConfigurationProperties struct {
33039	// Enabled - Flag to enable/disable traffic analytics.
33040	Enabled *bool `json:"enabled,omitempty"`
33041	// WorkspaceID - The resource guid of the attached workspace.
33042	WorkspaceID *string `json:"workspaceId,omitempty"`
33043	// WorkspaceRegion - The location of the attached workspace.
33044	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
33045	// WorkspaceResourceID - Resource Id of the attached workspace.
33046	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
33047	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics.
33048	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
33049}
33050
33051// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
33052type TrafficAnalyticsProperties struct {
33053	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
33054	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
33055}
33056
33057// TrafficSelectorPolicy an traffic selector policy for a virtual network gateway connection.
33058type TrafficSelectorPolicy struct {
33059	// LocalAddressRanges - A collection of local address spaces in CIDR format.
33060	LocalAddressRanges *[]string `json:"localAddressRanges,omitempty"`
33061	// RemoteAddressRanges - A collection of remote address spaces in CIDR format.
33062	RemoteAddressRanges *[]string `json:"remoteAddressRanges,omitempty"`
33063}
33064
33065// TroubleshootingDetails information gained from troubleshooting of specified resource.
33066type TroubleshootingDetails struct {
33067	// ID - The id of the get troubleshoot operation.
33068	ID *string `json:"id,omitempty"`
33069	// ReasonType - Reason type of failure.
33070	ReasonType *string `json:"reasonType,omitempty"`
33071	// Summary - A summary of troubleshooting.
33072	Summary *string `json:"summary,omitempty"`
33073	// Detail - Details on troubleshooting results.
33074	Detail *string `json:"detail,omitempty"`
33075	// RecommendedActions - List of recommended actions.
33076	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
33077}
33078
33079// TroubleshootingParameters parameters that define the resource to troubleshoot.
33080type TroubleshootingParameters struct {
33081	// TargetResourceID - The target resource to troubleshoot.
33082	TargetResourceID *string `json:"targetResourceId,omitempty"`
33083	// TroubleshootingProperties - Properties of the troubleshooting resource.
33084	*TroubleshootingProperties `json:"properties,omitempty"`
33085}
33086
33087// MarshalJSON is the custom marshaler for TroubleshootingParameters.
33088func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
33089	objectMap := make(map[string]interface{})
33090	if tp.TargetResourceID != nil {
33091		objectMap["targetResourceId"] = tp.TargetResourceID
33092	}
33093	if tp.TroubleshootingProperties != nil {
33094		objectMap["properties"] = tp.TroubleshootingProperties
33095	}
33096	return json.Marshal(objectMap)
33097}
33098
33099// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
33100func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
33101	var m map[string]*json.RawMessage
33102	err := json.Unmarshal(body, &m)
33103	if err != nil {
33104		return err
33105	}
33106	for k, v := range m {
33107		switch k {
33108		case "targetResourceId":
33109			if v != nil {
33110				var targetResourceID string
33111				err = json.Unmarshal(*v, &targetResourceID)
33112				if err != nil {
33113					return err
33114				}
33115				tp.TargetResourceID = &targetResourceID
33116			}
33117		case "properties":
33118			if v != nil {
33119				var troubleshootingProperties TroubleshootingProperties
33120				err = json.Unmarshal(*v, &troubleshootingProperties)
33121				if err != nil {
33122					return err
33123				}
33124				tp.TroubleshootingProperties = &troubleshootingProperties
33125			}
33126		}
33127	}
33128
33129	return nil
33130}
33131
33132// TroubleshootingProperties storage location provided for troubleshoot.
33133type TroubleshootingProperties struct {
33134	// StorageID - The ID for the storage account to save the troubleshoot result.
33135	StorageID *string `json:"storageId,omitempty"`
33136	// StoragePath - The path to the blob to save the troubleshoot result in.
33137	StoragePath *string `json:"storagePath,omitempty"`
33138}
33139
33140// TroubleshootingRecommendedActions recommended actions based on discovered issues.
33141type TroubleshootingRecommendedActions struct {
33142	// ActionID - ID of the recommended action.
33143	ActionID *string `json:"actionId,omitempty"`
33144	// ActionText - Description of recommended actions.
33145	ActionText *string `json:"actionText,omitempty"`
33146	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
33147	ActionURI *string `json:"actionUri,omitempty"`
33148	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
33149	ActionURIText *string `json:"actionUriText,omitempty"`
33150}
33151
33152// TroubleshootingResult troubleshooting information gained from specified resource.
33153type TroubleshootingResult struct {
33154	autorest.Response `json:"-"`
33155	// StartTime - The start time of the troubleshooting.
33156	StartTime *date.Time `json:"startTime,omitempty"`
33157	// EndTime - The end time of the troubleshooting.
33158	EndTime *date.Time `json:"endTime,omitempty"`
33159	// Code - The result code of the troubleshooting.
33160	Code *string `json:"code,omitempty"`
33161	// Results - Information from troubleshooting.
33162	Results *[]TroubleshootingDetails `json:"results,omitempty"`
33163}
33164
33165// TunnelConnectionHealth virtualNetworkGatewayConnection properties.
33166type TunnelConnectionHealth struct {
33167	// Tunnel - READ-ONLY; Tunnel name.
33168	Tunnel *string `json:"tunnel,omitempty"`
33169	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
33170	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
33171	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection.
33172	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
33173	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection.
33174	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
33175	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
33176	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
33177}
33178
33179// UnprepareNetworkPoliciesRequest details of UnprepareNetworkPolicies for Subnet.
33180type UnprepareNetworkPoliciesRequest struct {
33181	// ServiceName - The name of the service for which subnet is being unprepared for.
33182	ServiceName *string `json:"serviceName,omitempty"`
33183}
33184
33185// Usage the network resource usage.
33186type Usage struct {
33187	// ID - READ-ONLY; Resource identifier.
33188	ID *string `json:"id,omitempty"`
33189	// Unit - An enum describing the unit of measurement.
33190	Unit *string `json:"unit,omitempty"`
33191	// CurrentValue - The current value of the usage.
33192	CurrentValue *int64 `json:"currentValue,omitempty"`
33193	// Limit - The limit of usage.
33194	Limit *int64 `json:"limit,omitempty"`
33195	// Name - The name of the type of usage.
33196	Name *UsageName `json:"name,omitempty"`
33197}
33198
33199// UsageName the usage names.
33200type UsageName struct {
33201	// Value - A string describing the resource name.
33202	Value *string `json:"value,omitempty"`
33203	// LocalizedValue - A localized string describing the resource name.
33204	LocalizedValue *string `json:"localizedValue,omitempty"`
33205}
33206
33207// UsagesListResult the list usages operation response.
33208type UsagesListResult struct {
33209	autorest.Response `json:"-"`
33210	// Value - The list network resource usages.
33211	Value *[]Usage `json:"value,omitempty"`
33212	// NextLink - URL to get the next set of results.
33213	NextLink *string `json:"nextLink,omitempty"`
33214}
33215
33216// UsagesListResultIterator provides access to a complete listing of Usage values.
33217type UsagesListResultIterator struct {
33218	i    int
33219	page UsagesListResultPage
33220}
33221
33222// NextWithContext advances to the next value.  If there was an error making
33223// the request the iterator does not advance and the error is returned.
33224func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
33225	if tracing.IsEnabled() {
33226		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
33227		defer func() {
33228			sc := -1
33229			if iter.Response().Response.Response != nil {
33230				sc = iter.Response().Response.Response.StatusCode
33231			}
33232			tracing.EndSpan(ctx, sc, err)
33233		}()
33234	}
33235	iter.i++
33236	if iter.i < len(iter.page.Values()) {
33237		return nil
33238	}
33239	err = iter.page.NextWithContext(ctx)
33240	if err != nil {
33241		iter.i--
33242		return err
33243	}
33244	iter.i = 0
33245	return nil
33246}
33247
33248// Next advances to the next value.  If there was an error making
33249// the request the iterator does not advance and the error is returned.
33250// Deprecated: Use NextWithContext() instead.
33251func (iter *UsagesListResultIterator) Next() error {
33252	return iter.NextWithContext(context.Background())
33253}
33254
33255// NotDone returns true if the enumeration should be started or is not yet complete.
33256func (iter UsagesListResultIterator) NotDone() bool {
33257	return iter.page.NotDone() && iter.i < len(iter.page.Values())
33258}
33259
33260// Response returns the raw server response from the last page request.
33261func (iter UsagesListResultIterator) Response() UsagesListResult {
33262	return iter.page.Response()
33263}
33264
33265// Value returns the current value or a zero-initialized value if the
33266// iterator has advanced beyond the end of the collection.
33267func (iter UsagesListResultIterator) Value() Usage {
33268	if !iter.page.NotDone() {
33269		return Usage{}
33270	}
33271	return iter.page.Values()[iter.i]
33272}
33273
33274// Creates a new instance of the UsagesListResultIterator type.
33275func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
33276	return UsagesListResultIterator{page: page}
33277}
33278
33279// IsEmpty returns true if the ListResult contains no values.
33280func (ulr UsagesListResult) IsEmpty() bool {
33281	return ulr.Value == nil || len(*ulr.Value) == 0
33282}
33283
33284// usagesListResultPreparer prepares a request to retrieve the next set of results.
33285// It returns nil if no more results exist.
33286func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
33287	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
33288		return nil, nil
33289	}
33290	return autorest.Prepare((&http.Request{}).WithContext(ctx),
33291		autorest.AsJSON(),
33292		autorest.AsGet(),
33293		autorest.WithBaseURL(to.String(ulr.NextLink)))
33294}
33295
33296// UsagesListResultPage contains a page of Usage values.
33297type UsagesListResultPage struct {
33298	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
33299	ulr UsagesListResult
33300}
33301
33302// NextWithContext advances to the next page of values.  If there was an error making
33303// the request the page does not advance and the error is returned.
33304func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
33305	if tracing.IsEnabled() {
33306		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
33307		defer func() {
33308			sc := -1
33309			if page.Response().Response.Response != nil {
33310				sc = page.Response().Response.Response.StatusCode
33311			}
33312			tracing.EndSpan(ctx, sc, err)
33313		}()
33314	}
33315	next, err := page.fn(ctx, page.ulr)
33316	if err != nil {
33317		return err
33318	}
33319	page.ulr = next
33320	return nil
33321}
33322
33323// Next advances to the next page of values.  If there was an error making
33324// the request the page does not advance and the error is returned.
33325// Deprecated: Use NextWithContext() instead.
33326func (page *UsagesListResultPage) Next() error {
33327	return page.NextWithContext(context.Background())
33328}
33329
33330// NotDone returns true if the page enumeration should be started or is not yet complete.
33331func (page UsagesListResultPage) NotDone() bool {
33332	return !page.ulr.IsEmpty()
33333}
33334
33335// Response returns the raw server response from the last page request.
33336func (page UsagesListResultPage) Response() UsagesListResult {
33337	return page.ulr
33338}
33339
33340// Values returns the slice of values for the current page or nil if there are no values.
33341func (page UsagesListResultPage) Values() []Usage {
33342	if page.ulr.IsEmpty() {
33343		return nil
33344	}
33345	return *page.ulr.Value
33346}
33347
33348// Creates a new instance of the UsagesListResultPage type.
33349func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
33350	return UsagesListResultPage{fn: getNextPage}
33351}
33352
33353// VerificationIPFlowParameters parameters that define the IP flow to be verified.
33354type VerificationIPFlowParameters struct {
33355	// TargetResourceID - The ID of the target resource to perform next-hop on.
33356	TargetResourceID *string `json:"targetResourceId,omitempty"`
33357	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
33358	Direction Direction `json:"direction,omitempty"`
33359	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
33360	Protocol IPFlowProtocol `json:"protocol,omitempty"`
33361	// LocalPort - The local port. Acceptable values are a single integer in the range (0-65535). Support for * for the source port, which depends on the direction.
33362	LocalPort *string `json:"localPort,omitempty"`
33363	// RemotePort - The remote port. Acceptable values are a single integer in the range (0-65535). Support for * for the source port, which depends on the direction.
33364	RemotePort *string `json:"remotePort,omitempty"`
33365	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
33366	LocalIPAddress *string `json:"localIPAddress,omitempty"`
33367	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
33368	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
33369	// TargetNicResourceID - The NIC ID. (If VM has multiple NICs and IP forwarding is enabled on any of them, then this parameter must be specified. Otherwise optional).
33370	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
33371}
33372
33373// VerificationIPFlowResult results of IP flow verification on the target resource.
33374type VerificationIPFlowResult struct {
33375	autorest.Response `json:"-"`
33376	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
33377	Access Access `json:"access,omitempty"`
33378	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
33379	RuleName *string `json:"ruleName,omitempty"`
33380}
33381
33382// VirtualAppliance networkVirtualAppliance Resource.
33383type VirtualAppliance struct {
33384	autorest.Response `json:"-"`
33385	// VirtualAppliancePropertiesFormat - Properties of the Network Virtual Appliance.
33386	*VirtualAppliancePropertiesFormat `json:"properties,omitempty"`
33387	// Identity - The service principal that has read access to cloud-init and config blob.
33388	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
33389	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33390	Etag *string `json:"etag,omitempty"`
33391	// ID - Resource ID.
33392	ID *string `json:"id,omitempty"`
33393	// Name - READ-ONLY; Resource name.
33394	Name *string `json:"name,omitempty"`
33395	// Type - READ-ONLY; Resource type.
33396	Type *string `json:"type,omitempty"`
33397	// Location - Resource location.
33398	Location *string `json:"location,omitempty"`
33399	// Tags - Resource tags.
33400	Tags map[string]*string `json:"tags"`
33401}
33402
33403// MarshalJSON is the custom marshaler for VirtualAppliance.
33404func (va VirtualAppliance) MarshalJSON() ([]byte, error) {
33405	objectMap := make(map[string]interface{})
33406	if va.VirtualAppliancePropertiesFormat != nil {
33407		objectMap["properties"] = va.VirtualAppliancePropertiesFormat
33408	}
33409	if va.Identity != nil {
33410		objectMap["identity"] = va.Identity
33411	}
33412	if va.ID != nil {
33413		objectMap["id"] = va.ID
33414	}
33415	if va.Location != nil {
33416		objectMap["location"] = va.Location
33417	}
33418	if va.Tags != nil {
33419		objectMap["tags"] = va.Tags
33420	}
33421	return json.Marshal(objectMap)
33422}
33423
33424// UnmarshalJSON is the custom unmarshaler for VirtualAppliance struct.
33425func (va *VirtualAppliance) UnmarshalJSON(body []byte) error {
33426	var m map[string]*json.RawMessage
33427	err := json.Unmarshal(body, &m)
33428	if err != nil {
33429		return err
33430	}
33431	for k, v := range m {
33432		switch k {
33433		case "properties":
33434			if v != nil {
33435				var virtualAppliancePropertiesFormat VirtualAppliancePropertiesFormat
33436				err = json.Unmarshal(*v, &virtualAppliancePropertiesFormat)
33437				if err != nil {
33438					return err
33439				}
33440				va.VirtualAppliancePropertiesFormat = &virtualAppliancePropertiesFormat
33441			}
33442		case "identity":
33443			if v != nil {
33444				var identity ManagedServiceIdentity
33445				err = json.Unmarshal(*v, &identity)
33446				if err != nil {
33447					return err
33448				}
33449				va.Identity = &identity
33450			}
33451		case "etag":
33452			if v != nil {
33453				var etag string
33454				err = json.Unmarshal(*v, &etag)
33455				if err != nil {
33456					return err
33457				}
33458				va.Etag = &etag
33459			}
33460		case "id":
33461			if v != nil {
33462				var ID string
33463				err = json.Unmarshal(*v, &ID)
33464				if err != nil {
33465					return err
33466				}
33467				va.ID = &ID
33468			}
33469		case "name":
33470			if v != nil {
33471				var name string
33472				err = json.Unmarshal(*v, &name)
33473				if err != nil {
33474					return err
33475				}
33476				va.Name = &name
33477			}
33478		case "type":
33479			if v != nil {
33480				var typeVar string
33481				err = json.Unmarshal(*v, &typeVar)
33482				if err != nil {
33483					return err
33484				}
33485				va.Type = &typeVar
33486			}
33487		case "location":
33488			if v != nil {
33489				var location string
33490				err = json.Unmarshal(*v, &location)
33491				if err != nil {
33492					return err
33493				}
33494				va.Location = &location
33495			}
33496		case "tags":
33497			if v != nil {
33498				var tags map[string]*string
33499				err = json.Unmarshal(*v, &tags)
33500				if err != nil {
33501					return err
33502				}
33503				va.Tags = tags
33504			}
33505		}
33506	}
33507
33508	return nil
33509}
33510
33511// VirtualApplianceListResult response for ListNetworkVirtualAppliances API service call.
33512type VirtualApplianceListResult struct {
33513	autorest.Response `json:"-"`
33514	// Value - List of Network Virtual Appliances.
33515	Value *[]VirtualAppliance `json:"value,omitempty"`
33516	// NextLink - URL to get the next set of results.
33517	NextLink *string `json:"nextLink,omitempty"`
33518}
33519
33520// VirtualApplianceListResultIterator provides access to a complete listing of VirtualAppliance values.
33521type VirtualApplianceListResultIterator struct {
33522	i    int
33523	page VirtualApplianceListResultPage
33524}
33525
33526// NextWithContext advances to the next value.  If there was an error making
33527// the request the iterator does not advance and the error is returned.
33528func (iter *VirtualApplianceListResultIterator) NextWithContext(ctx context.Context) (err error) {
33529	if tracing.IsEnabled() {
33530		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceListResultIterator.NextWithContext")
33531		defer func() {
33532			sc := -1
33533			if iter.Response().Response.Response != nil {
33534				sc = iter.Response().Response.Response.StatusCode
33535			}
33536			tracing.EndSpan(ctx, sc, err)
33537		}()
33538	}
33539	iter.i++
33540	if iter.i < len(iter.page.Values()) {
33541		return nil
33542	}
33543	err = iter.page.NextWithContext(ctx)
33544	if err != nil {
33545		iter.i--
33546		return err
33547	}
33548	iter.i = 0
33549	return nil
33550}
33551
33552// Next advances to the next value.  If there was an error making
33553// the request the iterator does not advance and the error is returned.
33554// Deprecated: Use NextWithContext() instead.
33555func (iter *VirtualApplianceListResultIterator) Next() error {
33556	return iter.NextWithContext(context.Background())
33557}
33558
33559// NotDone returns true if the enumeration should be started or is not yet complete.
33560func (iter VirtualApplianceListResultIterator) NotDone() bool {
33561	return iter.page.NotDone() && iter.i < len(iter.page.Values())
33562}
33563
33564// Response returns the raw server response from the last page request.
33565func (iter VirtualApplianceListResultIterator) Response() VirtualApplianceListResult {
33566	return iter.page.Response()
33567}
33568
33569// Value returns the current value or a zero-initialized value if the
33570// iterator has advanced beyond the end of the collection.
33571func (iter VirtualApplianceListResultIterator) Value() VirtualAppliance {
33572	if !iter.page.NotDone() {
33573		return VirtualAppliance{}
33574	}
33575	return iter.page.Values()[iter.i]
33576}
33577
33578// Creates a new instance of the VirtualApplianceListResultIterator type.
33579func NewVirtualApplianceListResultIterator(page VirtualApplianceListResultPage) VirtualApplianceListResultIterator {
33580	return VirtualApplianceListResultIterator{page: page}
33581}
33582
33583// IsEmpty returns true if the ListResult contains no values.
33584func (valr VirtualApplianceListResult) IsEmpty() bool {
33585	return valr.Value == nil || len(*valr.Value) == 0
33586}
33587
33588// virtualApplianceListResultPreparer prepares a request to retrieve the next set of results.
33589// It returns nil if no more results exist.
33590func (valr VirtualApplianceListResult) virtualApplianceListResultPreparer(ctx context.Context) (*http.Request, error) {
33591	if valr.NextLink == nil || len(to.String(valr.NextLink)) < 1 {
33592		return nil, nil
33593	}
33594	return autorest.Prepare((&http.Request{}).WithContext(ctx),
33595		autorest.AsJSON(),
33596		autorest.AsGet(),
33597		autorest.WithBaseURL(to.String(valr.NextLink)))
33598}
33599
33600// VirtualApplianceListResultPage contains a page of VirtualAppliance values.
33601type VirtualApplianceListResultPage struct {
33602	fn   func(context.Context, VirtualApplianceListResult) (VirtualApplianceListResult, error)
33603	valr VirtualApplianceListResult
33604}
33605
33606// NextWithContext advances to the next page of values.  If there was an error making
33607// the request the page does not advance and the error is returned.
33608func (page *VirtualApplianceListResultPage) NextWithContext(ctx context.Context) (err error) {
33609	if tracing.IsEnabled() {
33610		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceListResultPage.NextWithContext")
33611		defer func() {
33612			sc := -1
33613			if page.Response().Response.Response != nil {
33614				sc = page.Response().Response.Response.StatusCode
33615			}
33616			tracing.EndSpan(ctx, sc, err)
33617		}()
33618	}
33619	next, err := page.fn(ctx, page.valr)
33620	if err != nil {
33621		return err
33622	}
33623	page.valr = next
33624	return nil
33625}
33626
33627// Next advances to the next page of values.  If there was an error making
33628// the request the page does not advance and the error is returned.
33629// Deprecated: Use NextWithContext() instead.
33630func (page *VirtualApplianceListResultPage) Next() error {
33631	return page.NextWithContext(context.Background())
33632}
33633
33634// NotDone returns true if the page enumeration should be started or is not yet complete.
33635func (page VirtualApplianceListResultPage) NotDone() bool {
33636	return !page.valr.IsEmpty()
33637}
33638
33639// Response returns the raw server response from the last page request.
33640func (page VirtualApplianceListResultPage) Response() VirtualApplianceListResult {
33641	return page.valr
33642}
33643
33644// Values returns the slice of values for the current page or nil if there are no values.
33645func (page VirtualApplianceListResultPage) Values() []VirtualAppliance {
33646	if page.valr.IsEmpty() {
33647		return nil
33648	}
33649	return *page.valr.Value
33650}
33651
33652// Creates a new instance of the VirtualApplianceListResultPage type.
33653func NewVirtualApplianceListResultPage(getNextPage func(context.Context, VirtualApplianceListResult) (VirtualApplianceListResult, error)) VirtualApplianceListResultPage {
33654	return VirtualApplianceListResultPage{fn: getNextPage}
33655}
33656
33657// VirtualApplianceNicProperties network Virtual Appliance NIC properties.
33658type VirtualApplianceNicProperties struct {
33659	// Name - READ-ONLY; NIC name.
33660	Name *string `json:"name,omitempty"`
33661	// PublicIPAddress - READ-ONLY; Public IP address.
33662	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
33663	// PrivateIPAddress - READ-ONLY; Private IP address.
33664	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
33665}
33666
33667// VirtualAppliancePropertiesFormat network Virtual Appliance definition.
33668type VirtualAppliancePropertiesFormat struct {
33669	// NvaSku - Network Virtual Appliance SKU.
33670	NvaSku *VirtualApplianceSkuProperties `json:"nvaSku,omitempty"`
33671	// BootStrapConfigurationBlobs - BootStrapConfigurationBlobs storage URLs.
33672	BootStrapConfigurationBlobs *[]string `json:"bootStrapConfigurationBlobs,omitempty"`
33673	// VirtualHub - The Virtual Hub where Network Virtual Appliance is being deployed.
33674	VirtualHub *SubResource `json:"virtualHub,omitempty"`
33675	// CloudInitConfigurationBlobs - CloudInitConfigurationBlob storage URLs.
33676	CloudInitConfigurationBlobs *[]string `json:"cloudInitConfigurationBlobs,omitempty"`
33677	// CloudInitConfiguration - CloudInitConfiguration string in plain text.
33678	CloudInitConfiguration *string `json:"cloudInitConfiguration,omitempty"`
33679	// VirtualApplianceAsn - VirtualAppliance ASN.
33680	VirtualApplianceAsn *int64 `json:"virtualApplianceAsn,omitempty"`
33681	// VirtualApplianceNics - READ-ONLY; List of Virtual Appliance Network Interfaces.
33682	VirtualApplianceNics *[]VirtualApplianceNicProperties `json:"virtualApplianceNics,omitempty"`
33683	// VirtualApplianceSites - READ-ONLY; List of references to VirtualApplianceSite.
33684	VirtualApplianceSites *[]SubResource `json:"virtualApplianceSites,omitempty"`
33685	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33686	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33687}
33688
33689// VirtualAppliancesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33690// long-running operation.
33691type VirtualAppliancesCreateOrUpdateFuture struct {
33692	azure.Future
33693}
33694
33695// Result returns the result of the asynchronous operation.
33696// If the operation has not completed it will return an error.
33697func (future *VirtualAppliancesCreateOrUpdateFuture) Result(client VirtualAppliancesClient) (va VirtualAppliance, err error) {
33698	var done bool
33699	done, err = future.DoneWithContext(context.Background(), client)
33700	if err != nil {
33701		err = autorest.NewErrorWithError(err, "network.VirtualAppliancesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33702		return
33703	}
33704	if !done {
33705		err = azure.NewAsyncOpIncompleteError("network.VirtualAppliancesCreateOrUpdateFuture")
33706		return
33707	}
33708	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33709	if va.Response.Response, err = future.GetResult(sender); err == nil && va.Response.Response.StatusCode != http.StatusNoContent {
33710		va, err = client.CreateOrUpdateResponder(va.Response.Response)
33711		if err != nil {
33712			err = autorest.NewErrorWithError(err, "network.VirtualAppliancesCreateOrUpdateFuture", "Result", va.Response.Response, "Failure responding to request")
33713		}
33714	}
33715	return
33716}
33717
33718// VirtualAppliancesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33719// operation.
33720type VirtualAppliancesDeleteFuture struct {
33721	azure.Future
33722}
33723
33724// Result returns the result of the asynchronous operation.
33725// If the operation has not completed it will return an error.
33726func (future *VirtualAppliancesDeleteFuture) Result(client VirtualAppliancesClient) (ar autorest.Response, err error) {
33727	var done bool
33728	done, err = future.DoneWithContext(context.Background(), client)
33729	if err != nil {
33730		err = autorest.NewErrorWithError(err, "network.VirtualAppliancesDeleteFuture", "Result", future.Response(), "Polling failure")
33731		return
33732	}
33733	if !done {
33734		err = azure.NewAsyncOpIncompleteError("network.VirtualAppliancesDeleteFuture")
33735		return
33736	}
33737	ar.Response = future.Response()
33738	return
33739}
33740
33741// VirtualApplianceSite virtual Appliance Site resource.
33742type VirtualApplianceSite struct {
33743	autorest.Response `json:"-"`
33744	// VirtualApplianceSiteProperties - The properties of the Virtual Appliance Sites.
33745	*VirtualApplianceSiteProperties `json:"properties,omitempty"`
33746	// Name - Name of the virtual appliance site.
33747	Name *string `json:"name,omitempty"`
33748	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33749	Etag *string `json:"etag,omitempty"`
33750	// Type - READ-ONLY; Site type.
33751	Type *string `json:"type,omitempty"`
33752	// ID - Resource ID.
33753	ID *string `json:"id,omitempty"`
33754}
33755
33756// MarshalJSON is the custom marshaler for VirtualApplianceSite.
33757func (vas VirtualApplianceSite) MarshalJSON() ([]byte, error) {
33758	objectMap := make(map[string]interface{})
33759	if vas.VirtualApplianceSiteProperties != nil {
33760		objectMap["properties"] = vas.VirtualApplianceSiteProperties
33761	}
33762	if vas.Name != nil {
33763		objectMap["name"] = vas.Name
33764	}
33765	if vas.ID != nil {
33766		objectMap["id"] = vas.ID
33767	}
33768	return json.Marshal(objectMap)
33769}
33770
33771// UnmarshalJSON is the custom unmarshaler for VirtualApplianceSite struct.
33772func (vas *VirtualApplianceSite) UnmarshalJSON(body []byte) error {
33773	var m map[string]*json.RawMessage
33774	err := json.Unmarshal(body, &m)
33775	if err != nil {
33776		return err
33777	}
33778	for k, v := range m {
33779		switch k {
33780		case "properties":
33781			if v != nil {
33782				var virtualApplianceSiteProperties VirtualApplianceSiteProperties
33783				err = json.Unmarshal(*v, &virtualApplianceSiteProperties)
33784				if err != nil {
33785					return err
33786				}
33787				vas.VirtualApplianceSiteProperties = &virtualApplianceSiteProperties
33788			}
33789		case "name":
33790			if v != nil {
33791				var name string
33792				err = json.Unmarshal(*v, &name)
33793				if err != nil {
33794					return err
33795				}
33796				vas.Name = &name
33797			}
33798		case "etag":
33799			if v != nil {
33800				var etag string
33801				err = json.Unmarshal(*v, &etag)
33802				if err != nil {
33803					return err
33804				}
33805				vas.Etag = &etag
33806			}
33807		case "type":
33808			if v != nil {
33809				var typeVar string
33810				err = json.Unmarshal(*v, &typeVar)
33811				if err != nil {
33812					return err
33813				}
33814				vas.Type = &typeVar
33815			}
33816		case "id":
33817			if v != nil {
33818				var ID string
33819				err = json.Unmarshal(*v, &ID)
33820				if err != nil {
33821					return err
33822				}
33823				vas.ID = &ID
33824			}
33825		}
33826	}
33827
33828	return nil
33829}
33830
33831// VirtualApplianceSiteListResult response for ListNetworkVirtualApplianceSites API service call.
33832type VirtualApplianceSiteListResult struct {
33833	autorest.Response `json:"-"`
33834	// Value - List of Network Virtual Appliance sites.
33835	Value *[]VirtualApplianceSite `json:"value,omitempty"`
33836	// NextLink - URL to get the next set of results.
33837	NextLink *string `json:"nextLink,omitempty"`
33838}
33839
33840// VirtualApplianceSiteListResultIterator provides access to a complete listing of VirtualApplianceSite
33841// values.
33842type VirtualApplianceSiteListResultIterator struct {
33843	i    int
33844	page VirtualApplianceSiteListResultPage
33845}
33846
33847// NextWithContext advances to the next value.  If there was an error making
33848// the request the iterator does not advance and the error is returned.
33849func (iter *VirtualApplianceSiteListResultIterator) NextWithContext(ctx context.Context) (err error) {
33850	if tracing.IsEnabled() {
33851		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSiteListResultIterator.NextWithContext")
33852		defer func() {
33853			sc := -1
33854			if iter.Response().Response.Response != nil {
33855				sc = iter.Response().Response.Response.StatusCode
33856			}
33857			tracing.EndSpan(ctx, sc, err)
33858		}()
33859	}
33860	iter.i++
33861	if iter.i < len(iter.page.Values()) {
33862		return nil
33863	}
33864	err = iter.page.NextWithContext(ctx)
33865	if err != nil {
33866		iter.i--
33867		return err
33868	}
33869	iter.i = 0
33870	return nil
33871}
33872
33873// Next advances to the next value.  If there was an error making
33874// the request the iterator does not advance and the error is returned.
33875// Deprecated: Use NextWithContext() instead.
33876func (iter *VirtualApplianceSiteListResultIterator) Next() error {
33877	return iter.NextWithContext(context.Background())
33878}
33879
33880// NotDone returns true if the enumeration should be started or is not yet complete.
33881func (iter VirtualApplianceSiteListResultIterator) NotDone() bool {
33882	return iter.page.NotDone() && iter.i < len(iter.page.Values())
33883}
33884
33885// Response returns the raw server response from the last page request.
33886func (iter VirtualApplianceSiteListResultIterator) Response() VirtualApplianceSiteListResult {
33887	return iter.page.Response()
33888}
33889
33890// Value returns the current value or a zero-initialized value if the
33891// iterator has advanced beyond the end of the collection.
33892func (iter VirtualApplianceSiteListResultIterator) Value() VirtualApplianceSite {
33893	if !iter.page.NotDone() {
33894		return VirtualApplianceSite{}
33895	}
33896	return iter.page.Values()[iter.i]
33897}
33898
33899// Creates a new instance of the VirtualApplianceSiteListResultIterator type.
33900func NewVirtualApplianceSiteListResultIterator(page VirtualApplianceSiteListResultPage) VirtualApplianceSiteListResultIterator {
33901	return VirtualApplianceSiteListResultIterator{page: page}
33902}
33903
33904// IsEmpty returns true if the ListResult contains no values.
33905func (vaslr VirtualApplianceSiteListResult) IsEmpty() bool {
33906	return vaslr.Value == nil || len(*vaslr.Value) == 0
33907}
33908
33909// virtualApplianceSiteListResultPreparer prepares a request to retrieve the next set of results.
33910// It returns nil if no more results exist.
33911func (vaslr VirtualApplianceSiteListResult) virtualApplianceSiteListResultPreparer(ctx context.Context) (*http.Request, error) {
33912	if vaslr.NextLink == nil || len(to.String(vaslr.NextLink)) < 1 {
33913		return nil, nil
33914	}
33915	return autorest.Prepare((&http.Request{}).WithContext(ctx),
33916		autorest.AsJSON(),
33917		autorest.AsGet(),
33918		autorest.WithBaseURL(to.String(vaslr.NextLink)))
33919}
33920
33921// VirtualApplianceSiteListResultPage contains a page of VirtualApplianceSite values.
33922type VirtualApplianceSiteListResultPage struct {
33923	fn    func(context.Context, VirtualApplianceSiteListResult) (VirtualApplianceSiteListResult, error)
33924	vaslr VirtualApplianceSiteListResult
33925}
33926
33927// NextWithContext advances to the next page of values.  If there was an error making
33928// the request the page does not advance and the error is returned.
33929func (page *VirtualApplianceSiteListResultPage) NextWithContext(ctx context.Context) (err error) {
33930	if tracing.IsEnabled() {
33931		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSiteListResultPage.NextWithContext")
33932		defer func() {
33933			sc := -1
33934			if page.Response().Response.Response != nil {
33935				sc = page.Response().Response.Response.StatusCode
33936			}
33937			tracing.EndSpan(ctx, sc, err)
33938		}()
33939	}
33940	next, err := page.fn(ctx, page.vaslr)
33941	if err != nil {
33942		return err
33943	}
33944	page.vaslr = next
33945	return nil
33946}
33947
33948// Next advances to the next page of values.  If there was an error making
33949// the request the page does not advance and the error is returned.
33950// Deprecated: Use NextWithContext() instead.
33951func (page *VirtualApplianceSiteListResultPage) Next() error {
33952	return page.NextWithContext(context.Background())
33953}
33954
33955// NotDone returns true if the page enumeration should be started or is not yet complete.
33956func (page VirtualApplianceSiteListResultPage) NotDone() bool {
33957	return !page.vaslr.IsEmpty()
33958}
33959
33960// Response returns the raw server response from the last page request.
33961func (page VirtualApplianceSiteListResultPage) Response() VirtualApplianceSiteListResult {
33962	return page.vaslr
33963}
33964
33965// Values returns the slice of values for the current page or nil if there are no values.
33966func (page VirtualApplianceSiteListResultPage) Values() []VirtualApplianceSite {
33967	if page.vaslr.IsEmpty() {
33968		return nil
33969	}
33970	return *page.vaslr.Value
33971}
33972
33973// Creates a new instance of the VirtualApplianceSiteListResultPage type.
33974func NewVirtualApplianceSiteListResultPage(getNextPage func(context.Context, VirtualApplianceSiteListResult) (VirtualApplianceSiteListResult, error)) VirtualApplianceSiteListResultPage {
33975	return VirtualApplianceSiteListResultPage{fn: getNextPage}
33976}
33977
33978// VirtualApplianceSiteProperties properties of the rule group.
33979type VirtualApplianceSiteProperties struct {
33980	// AddressPrefix - Address Prefix.
33981	AddressPrefix *string `json:"addressPrefix,omitempty"`
33982	// O365Policy - Office 365 Policy.
33983	O365Policy *Office365PolicyProperties `json:"o365Policy,omitempty"`
33984	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33985	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33986}
33987
33988// VirtualApplianceSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33989// long-running operation.
33990type VirtualApplianceSitesCreateOrUpdateFuture struct {
33991	azure.Future
33992}
33993
33994// Result returns the result of the asynchronous operation.
33995// If the operation has not completed it will return an error.
33996func (future *VirtualApplianceSitesCreateOrUpdateFuture) Result(client VirtualApplianceSitesClient) (vas VirtualApplianceSite, err error) {
33997	var done bool
33998	done, err = future.DoneWithContext(context.Background(), client)
33999	if err != nil {
34000		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34001		return
34002	}
34003	if !done {
34004		err = azure.NewAsyncOpIncompleteError("network.VirtualApplianceSitesCreateOrUpdateFuture")
34005		return
34006	}
34007	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34008	if vas.Response.Response, err = future.GetResult(sender); err == nil && vas.Response.Response.StatusCode != http.StatusNoContent {
34009		vas, err = client.CreateOrUpdateResponder(vas.Response.Response)
34010		if err != nil {
34011			err = autorest.NewErrorWithError(err, "network.VirtualApplianceSitesCreateOrUpdateFuture", "Result", vas.Response.Response, "Failure responding to request")
34012		}
34013	}
34014	return
34015}
34016
34017// VirtualApplianceSitesDeleteFuture an abstraction for monitoring and retrieving the results of a
34018// long-running operation.
34019type VirtualApplianceSitesDeleteFuture struct {
34020	azure.Future
34021}
34022
34023// Result returns the result of the asynchronous operation.
34024// If the operation has not completed it will return an error.
34025func (future *VirtualApplianceSitesDeleteFuture) Result(client VirtualApplianceSitesClient) (ar autorest.Response, err error) {
34026	var done bool
34027	done, err = future.DoneWithContext(context.Background(), client)
34028	if err != nil {
34029		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSitesDeleteFuture", "Result", future.Response(), "Polling failure")
34030		return
34031	}
34032	if !done {
34033		err = azure.NewAsyncOpIncompleteError("network.VirtualApplianceSitesDeleteFuture")
34034		return
34035	}
34036	ar.Response = future.Response()
34037	return
34038}
34039
34040// VirtualApplianceSku definition of the NetworkVirtualApplianceSkus resource.
34041type VirtualApplianceSku struct {
34042	autorest.Response `json:"-"`
34043	// VirtualApplianceSkuPropertiesFormat - NetworkVirtualApplianceSku properties.
34044	*VirtualApplianceSkuPropertiesFormat `json:"properties,omitempty"`
34045	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34046	Etag *string `json:"etag,omitempty"`
34047	// ID - Resource ID.
34048	ID *string `json:"id,omitempty"`
34049	// Name - READ-ONLY; Resource name.
34050	Name *string `json:"name,omitempty"`
34051	// Type - READ-ONLY; Resource type.
34052	Type *string `json:"type,omitempty"`
34053	// Location - Resource location.
34054	Location *string `json:"location,omitempty"`
34055	// Tags - Resource tags.
34056	Tags map[string]*string `json:"tags"`
34057}
34058
34059// MarshalJSON is the custom marshaler for VirtualApplianceSku.
34060func (vas VirtualApplianceSku) MarshalJSON() ([]byte, error) {
34061	objectMap := make(map[string]interface{})
34062	if vas.VirtualApplianceSkuPropertiesFormat != nil {
34063		objectMap["properties"] = vas.VirtualApplianceSkuPropertiesFormat
34064	}
34065	if vas.ID != nil {
34066		objectMap["id"] = vas.ID
34067	}
34068	if vas.Location != nil {
34069		objectMap["location"] = vas.Location
34070	}
34071	if vas.Tags != nil {
34072		objectMap["tags"] = vas.Tags
34073	}
34074	return json.Marshal(objectMap)
34075}
34076
34077// UnmarshalJSON is the custom unmarshaler for VirtualApplianceSku struct.
34078func (vas *VirtualApplianceSku) UnmarshalJSON(body []byte) error {
34079	var m map[string]*json.RawMessage
34080	err := json.Unmarshal(body, &m)
34081	if err != nil {
34082		return err
34083	}
34084	for k, v := range m {
34085		switch k {
34086		case "properties":
34087			if v != nil {
34088				var virtualApplianceSkuPropertiesFormat VirtualApplianceSkuPropertiesFormat
34089				err = json.Unmarshal(*v, &virtualApplianceSkuPropertiesFormat)
34090				if err != nil {
34091					return err
34092				}
34093				vas.VirtualApplianceSkuPropertiesFormat = &virtualApplianceSkuPropertiesFormat
34094			}
34095		case "etag":
34096			if v != nil {
34097				var etag string
34098				err = json.Unmarshal(*v, &etag)
34099				if err != nil {
34100					return err
34101				}
34102				vas.Etag = &etag
34103			}
34104		case "id":
34105			if v != nil {
34106				var ID string
34107				err = json.Unmarshal(*v, &ID)
34108				if err != nil {
34109					return err
34110				}
34111				vas.ID = &ID
34112			}
34113		case "name":
34114			if v != nil {
34115				var name string
34116				err = json.Unmarshal(*v, &name)
34117				if err != nil {
34118					return err
34119				}
34120				vas.Name = &name
34121			}
34122		case "type":
34123			if v != nil {
34124				var typeVar string
34125				err = json.Unmarshal(*v, &typeVar)
34126				if err != nil {
34127					return err
34128				}
34129				vas.Type = &typeVar
34130			}
34131		case "location":
34132			if v != nil {
34133				var location string
34134				err = json.Unmarshal(*v, &location)
34135				if err != nil {
34136					return err
34137				}
34138				vas.Location = &location
34139			}
34140		case "tags":
34141			if v != nil {
34142				var tags map[string]*string
34143				err = json.Unmarshal(*v, &tags)
34144				if err != nil {
34145					return err
34146				}
34147				vas.Tags = tags
34148			}
34149		}
34150	}
34151
34152	return nil
34153}
34154
34155// VirtualApplianceSkuInstances list of available Sku and instances.
34156type VirtualApplianceSkuInstances struct {
34157	// ScaleUnit - READ-ONLY; Scale Unit.
34158	ScaleUnit *string `json:"scaleUnit,omitempty"`
34159	// InstanceCount - READ-ONLY; Instance Count.
34160	InstanceCount *int32 `json:"instanceCount,omitempty"`
34161}
34162
34163// VirtualApplianceSkuListResult response for ListNetworkVirtualApplianceSkus API service call.
34164type VirtualApplianceSkuListResult struct {
34165	autorest.Response `json:"-"`
34166	// Value - List of Network Virtual Appliance Skus that are available.
34167	Value *[]VirtualApplianceSku `json:"value,omitempty"`
34168	// NextLink - URL to get the next set of results.
34169	NextLink *string `json:"nextLink,omitempty"`
34170}
34171
34172// VirtualApplianceSkuListResultIterator provides access to a complete listing of VirtualApplianceSku
34173// values.
34174type VirtualApplianceSkuListResultIterator struct {
34175	i    int
34176	page VirtualApplianceSkuListResultPage
34177}
34178
34179// NextWithContext advances to the next value.  If there was an error making
34180// the request the iterator does not advance and the error is returned.
34181func (iter *VirtualApplianceSkuListResultIterator) NextWithContext(ctx context.Context) (err error) {
34182	if tracing.IsEnabled() {
34183		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSkuListResultIterator.NextWithContext")
34184		defer func() {
34185			sc := -1
34186			if iter.Response().Response.Response != nil {
34187				sc = iter.Response().Response.Response.StatusCode
34188			}
34189			tracing.EndSpan(ctx, sc, err)
34190		}()
34191	}
34192	iter.i++
34193	if iter.i < len(iter.page.Values()) {
34194		return nil
34195	}
34196	err = iter.page.NextWithContext(ctx)
34197	if err != nil {
34198		iter.i--
34199		return err
34200	}
34201	iter.i = 0
34202	return nil
34203}
34204
34205// Next advances to the next value.  If there was an error making
34206// the request the iterator does not advance and the error is returned.
34207// Deprecated: Use NextWithContext() instead.
34208func (iter *VirtualApplianceSkuListResultIterator) Next() error {
34209	return iter.NextWithContext(context.Background())
34210}
34211
34212// NotDone returns true if the enumeration should be started or is not yet complete.
34213func (iter VirtualApplianceSkuListResultIterator) NotDone() bool {
34214	return iter.page.NotDone() && iter.i < len(iter.page.Values())
34215}
34216
34217// Response returns the raw server response from the last page request.
34218func (iter VirtualApplianceSkuListResultIterator) Response() VirtualApplianceSkuListResult {
34219	return iter.page.Response()
34220}
34221
34222// Value returns the current value or a zero-initialized value if the
34223// iterator has advanced beyond the end of the collection.
34224func (iter VirtualApplianceSkuListResultIterator) Value() VirtualApplianceSku {
34225	if !iter.page.NotDone() {
34226		return VirtualApplianceSku{}
34227	}
34228	return iter.page.Values()[iter.i]
34229}
34230
34231// Creates a new instance of the VirtualApplianceSkuListResultIterator type.
34232func NewVirtualApplianceSkuListResultIterator(page VirtualApplianceSkuListResultPage) VirtualApplianceSkuListResultIterator {
34233	return VirtualApplianceSkuListResultIterator{page: page}
34234}
34235
34236// IsEmpty returns true if the ListResult contains no values.
34237func (vaslr VirtualApplianceSkuListResult) IsEmpty() bool {
34238	return vaslr.Value == nil || len(*vaslr.Value) == 0
34239}
34240
34241// virtualApplianceSkuListResultPreparer prepares a request to retrieve the next set of results.
34242// It returns nil if no more results exist.
34243func (vaslr VirtualApplianceSkuListResult) virtualApplianceSkuListResultPreparer(ctx context.Context) (*http.Request, error) {
34244	if vaslr.NextLink == nil || len(to.String(vaslr.NextLink)) < 1 {
34245		return nil, nil
34246	}
34247	return autorest.Prepare((&http.Request{}).WithContext(ctx),
34248		autorest.AsJSON(),
34249		autorest.AsGet(),
34250		autorest.WithBaseURL(to.String(vaslr.NextLink)))
34251}
34252
34253// VirtualApplianceSkuListResultPage contains a page of VirtualApplianceSku values.
34254type VirtualApplianceSkuListResultPage struct {
34255	fn    func(context.Context, VirtualApplianceSkuListResult) (VirtualApplianceSkuListResult, error)
34256	vaslr VirtualApplianceSkuListResult
34257}
34258
34259// NextWithContext advances to the next page of values.  If there was an error making
34260// the request the page does not advance and the error is returned.
34261func (page *VirtualApplianceSkuListResultPage) NextWithContext(ctx context.Context) (err error) {
34262	if tracing.IsEnabled() {
34263		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSkuListResultPage.NextWithContext")
34264		defer func() {
34265			sc := -1
34266			if page.Response().Response.Response != nil {
34267				sc = page.Response().Response.Response.StatusCode
34268			}
34269			tracing.EndSpan(ctx, sc, err)
34270		}()
34271	}
34272	next, err := page.fn(ctx, page.vaslr)
34273	if err != nil {
34274		return err
34275	}
34276	page.vaslr = next
34277	return nil
34278}
34279
34280// Next advances to the next page of values.  If there was an error making
34281// the request the page does not advance and the error is returned.
34282// Deprecated: Use NextWithContext() instead.
34283func (page *VirtualApplianceSkuListResultPage) Next() error {
34284	return page.NextWithContext(context.Background())
34285}
34286
34287// NotDone returns true if the page enumeration should be started or is not yet complete.
34288func (page VirtualApplianceSkuListResultPage) NotDone() bool {
34289	return !page.vaslr.IsEmpty()
34290}
34291
34292// Response returns the raw server response from the last page request.
34293func (page VirtualApplianceSkuListResultPage) Response() VirtualApplianceSkuListResult {
34294	return page.vaslr
34295}
34296
34297// Values returns the slice of values for the current page or nil if there are no values.
34298func (page VirtualApplianceSkuListResultPage) Values() []VirtualApplianceSku {
34299	if page.vaslr.IsEmpty() {
34300		return nil
34301	}
34302	return *page.vaslr.Value
34303}
34304
34305// Creates a new instance of the VirtualApplianceSkuListResultPage type.
34306func NewVirtualApplianceSkuListResultPage(getNextPage func(context.Context, VirtualApplianceSkuListResult) (VirtualApplianceSkuListResult, error)) VirtualApplianceSkuListResultPage {
34307	return VirtualApplianceSkuListResultPage{fn: getNextPage}
34308}
34309
34310// VirtualApplianceSkuProperties network Virtual Appliance Sku Properties.
34311type VirtualApplianceSkuProperties struct {
34312	// Vendor - Virtual Appliance Vendor.
34313	Vendor *string `json:"vendor,omitempty"`
34314	// BundledScaleUnit - Virtual Appliance Scale Unit.
34315	BundledScaleUnit *string `json:"bundledScaleUnit,omitempty"`
34316	// MarketPlaceVersion - Virtual Appliance Version.
34317	MarketPlaceVersion *string `json:"marketPlaceVersion,omitempty"`
34318}
34319
34320// VirtualApplianceSkuPropertiesFormat properties specific to NetworkVirtualApplianceSkus.
34321type VirtualApplianceSkuPropertiesFormat struct {
34322	// Vendor - READ-ONLY; Network Virtual Appliance Sku vendor.
34323	Vendor *string `json:"vendor,omitempty"`
34324	// AvailableVersions - READ-ONLY; Available Network Virtual Appliance versions.
34325	AvailableVersions *[]string `json:"availableVersions,omitempty"`
34326	// AvailableScaleUnits - The list of scale units available.
34327	AvailableScaleUnits *[]VirtualApplianceSkuInstances `json:"availableScaleUnits,omitempty"`
34328}
34329
34330// VirtualHub virtualHub Resource.
34331type VirtualHub struct {
34332	autorest.Response `json:"-"`
34333	// VirtualHubProperties - Properties of the virtual hub.
34334	*VirtualHubProperties `json:"properties,omitempty"`
34335	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34336	Etag *string `json:"etag,omitempty"`
34337	// ID - Resource ID.
34338	ID *string `json:"id,omitempty"`
34339	// Name - READ-ONLY; Resource name.
34340	Name *string `json:"name,omitempty"`
34341	// Type - READ-ONLY; Resource type.
34342	Type *string `json:"type,omitempty"`
34343	// Location - Resource location.
34344	Location *string `json:"location,omitempty"`
34345	// Tags - Resource tags.
34346	Tags map[string]*string `json:"tags"`
34347}
34348
34349// MarshalJSON is the custom marshaler for VirtualHub.
34350func (vh VirtualHub) MarshalJSON() ([]byte, error) {
34351	objectMap := make(map[string]interface{})
34352	if vh.VirtualHubProperties != nil {
34353		objectMap["properties"] = vh.VirtualHubProperties
34354	}
34355	if vh.ID != nil {
34356		objectMap["id"] = vh.ID
34357	}
34358	if vh.Location != nil {
34359		objectMap["location"] = vh.Location
34360	}
34361	if vh.Tags != nil {
34362		objectMap["tags"] = vh.Tags
34363	}
34364	return json.Marshal(objectMap)
34365}
34366
34367// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
34368func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
34369	var m map[string]*json.RawMessage
34370	err := json.Unmarshal(body, &m)
34371	if err != nil {
34372		return err
34373	}
34374	for k, v := range m {
34375		switch k {
34376		case "properties":
34377			if v != nil {
34378				var virtualHubProperties VirtualHubProperties
34379				err = json.Unmarshal(*v, &virtualHubProperties)
34380				if err != nil {
34381					return err
34382				}
34383				vh.VirtualHubProperties = &virtualHubProperties
34384			}
34385		case "etag":
34386			if v != nil {
34387				var etag string
34388				err = json.Unmarshal(*v, &etag)
34389				if err != nil {
34390					return err
34391				}
34392				vh.Etag = &etag
34393			}
34394		case "id":
34395			if v != nil {
34396				var ID string
34397				err = json.Unmarshal(*v, &ID)
34398				if err != nil {
34399					return err
34400				}
34401				vh.ID = &ID
34402			}
34403		case "name":
34404			if v != nil {
34405				var name string
34406				err = json.Unmarshal(*v, &name)
34407				if err != nil {
34408					return err
34409				}
34410				vh.Name = &name
34411			}
34412		case "type":
34413			if v != nil {
34414				var typeVar string
34415				err = json.Unmarshal(*v, &typeVar)
34416				if err != nil {
34417					return err
34418				}
34419				vh.Type = &typeVar
34420			}
34421		case "location":
34422			if v != nil {
34423				var location string
34424				err = json.Unmarshal(*v, &location)
34425				if err != nil {
34426					return err
34427				}
34428				vh.Location = &location
34429			}
34430		case "tags":
34431			if v != nil {
34432				var tags map[string]*string
34433				err = json.Unmarshal(*v, &tags)
34434				if err != nil {
34435					return err
34436				}
34437				vh.Tags = tags
34438			}
34439		}
34440	}
34441
34442	return nil
34443}
34444
34445// VirtualHubBgpConnectionCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
34446// a long-running operation.
34447type VirtualHubBgpConnectionCreateOrUpdateFuture struct {
34448	azure.Future
34449}
34450
34451// Result returns the result of the asynchronous operation.
34452// If the operation has not completed it will return an error.
34453func (future *VirtualHubBgpConnectionCreateOrUpdateFuture) Result(client VirtualHubBgpConnectionClient) (bc BgpConnection, err error) {
34454	var done bool
34455	done, err = future.DoneWithContext(context.Background(), client)
34456	if err != nil {
34457		err = autorest.NewErrorWithError(err, "network.VirtualHubBgpConnectionCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34458		return
34459	}
34460	if !done {
34461		err = azure.NewAsyncOpIncompleteError("network.VirtualHubBgpConnectionCreateOrUpdateFuture")
34462		return
34463	}
34464	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34465	if bc.Response.Response, err = future.GetResult(sender); err == nil && bc.Response.Response.StatusCode != http.StatusNoContent {
34466		bc, err = client.CreateOrUpdateResponder(bc.Response.Response)
34467		if err != nil {
34468			err = autorest.NewErrorWithError(err, "network.VirtualHubBgpConnectionCreateOrUpdateFuture", "Result", bc.Response.Response, "Failure responding to request")
34469		}
34470	}
34471	return
34472}
34473
34474// VirtualHubBgpConnectionDeleteFuture an abstraction for monitoring and retrieving the results of a
34475// long-running operation.
34476type VirtualHubBgpConnectionDeleteFuture struct {
34477	azure.Future
34478}
34479
34480// Result returns the result of the asynchronous operation.
34481// If the operation has not completed it will return an error.
34482func (future *VirtualHubBgpConnectionDeleteFuture) Result(client VirtualHubBgpConnectionClient) (ar autorest.Response, err error) {
34483	var done bool
34484	done, err = future.DoneWithContext(context.Background(), client)
34485	if err != nil {
34486		err = autorest.NewErrorWithError(err, "network.VirtualHubBgpConnectionDeleteFuture", "Result", future.Response(), "Polling failure")
34487		return
34488	}
34489	if !done {
34490		err = azure.NewAsyncOpIncompleteError("network.VirtualHubBgpConnectionDeleteFuture")
34491		return
34492	}
34493	ar.Response = future.Response()
34494	return
34495}
34496
34497// VirtualHubEffectiveRoute the effective route configured on the virtual hub or specified resource.
34498type VirtualHubEffectiveRoute struct {
34499	// AddressPrefixes - The list of address prefixes.
34500	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
34501	// NextHops - The list of next hops.
34502	NextHops *[]string `json:"nextHops,omitempty"`
34503	// NextHopType - The type of the next hop.
34504	NextHopType *string `json:"nextHopType,omitempty"`
34505	// AsPath - The ASPath of this route.
34506	AsPath *string `json:"asPath,omitempty"`
34507	// RouteOrigin - The origin of this route.
34508	RouteOrigin *string `json:"routeOrigin,omitempty"`
34509}
34510
34511// VirtualHubEffectiveRouteEffectiveRouteList effectiveRoutes List.
34512type VirtualHubEffectiveRouteEffectiveRouteList struct {
34513	// Value - The list of effective routes configured on the virtual hub or the specified resource.
34514	Value *[]VirtualHubEffectiveRoute `json:"value,omitempty"`
34515}
34516
34517// VirtualHubID virtual Hub identifier.
34518type VirtualHubID struct {
34519	// ID - The resource URI for the Virtual Hub where the ExpressRoute gateway is or will be deployed. The Virtual Hub resource and the ExpressRoute gateway resource reside in the same subscription.
34520	ID *string `json:"id,omitempty"`
34521}
34522
34523// VirtualHubIPConfigurationCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
34524// of a long-running operation.
34525type VirtualHubIPConfigurationCreateOrUpdateFuture struct {
34526	azure.Future
34527}
34528
34529// Result returns the result of the asynchronous operation.
34530// If the operation has not completed it will return an error.
34531func (future *VirtualHubIPConfigurationCreateOrUpdateFuture) Result(client VirtualHubIPConfigurationClient) (hic HubIPConfiguration, err error) {
34532	var done bool
34533	done, err = future.DoneWithContext(context.Background(), client)
34534	if err != nil {
34535		err = autorest.NewErrorWithError(err, "network.VirtualHubIPConfigurationCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34536		return
34537	}
34538	if !done {
34539		err = azure.NewAsyncOpIncompleteError("network.VirtualHubIPConfigurationCreateOrUpdateFuture")
34540		return
34541	}
34542	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34543	if hic.Response.Response, err = future.GetResult(sender); err == nil && hic.Response.Response.StatusCode != http.StatusNoContent {
34544		hic, err = client.CreateOrUpdateResponder(hic.Response.Response)
34545		if err != nil {
34546			err = autorest.NewErrorWithError(err, "network.VirtualHubIPConfigurationCreateOrUpdateFuture", "Result", hic.Response.Response, "Failure responding to request")
34547		}
34548	}
34549	return
34550}
34551
34552// VirtualHubIPConfigurationDeleteFuture an abstraction for monitoring and retrieving the results of a
34553// long-running operation.
34554type VirtualHubIPConfigurationDeleteFuture struct {
34555	azure.Future
34556}
34557
34558// Result returns the result of the asynchronous operation.
34559// If the operation has not completed it will return an error.
34560func (future *VirtualHubIPConfigurationDeleteFuture) Result(client VirtualHubIPConfigurationClient) (ar autorest.Response, err error) {
34561	var done bool
34562	done, err = future.DoneWithContext(context.Background(), client)
34563	if err != nil {
34564		err = autorest.NewErrorWithError(err, "network.VirtualHubIPConfigurationDeleteFuture", "Result", future.Response(), "Polling failure")
34565		return
34566	}
34567	if !done {
34568		err = azure.NewAsyncOpIncompleteError("network.VirtualHubIPConfigurationDeleteFuture")
34569		return
34570	}
34571	ar.Response = future.Response()
34572	return
34573}
34574
34575// VirtualHubProperties parameters for VirtualHub.
34576type VirtualHubProperties struct {
34577	// VirtualWan - The VirtualWAN to which the VirtualHub belongs.
34578	VirtualWan *SubResource `json:"virtualWan,omitempty"`
34579	// VpnGateway - The VpnGateway associated with this VirtualHub.
34580	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
34581	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub.
34582	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
34583	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub.
34584	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
34585	// AzureFirewall - The azureFirewall associated with this VirtualHub.
34586	AzureFirewall *SubResource `json:"azureFirewall,omitempty"`
34587	// SecurityPartnerProvider - The securityPartnerProvider associated with this VirtualHub.
34588	SecurityPartnerProvider *SubResource `json:"securityPartnerProvider,omitempty"`
34589	// AddressPrefix - Address-prefix for this VirtualHub.
34590	AddressPrefix *string `json:"addressPrefix,omitempty"`
34591	// RouteTable - The routeTable associated with this virtual hub.
34592	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
34593	// ProvisioningState - READ-ONLY; The provisioning state of the virtual hub resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34594	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34595	// SecurityProviderName - The Security Provider name.
34596	SecurityProviderName *string `json:"securityProviderName,omitempty"`
34597	// VirtualHubRouteTableV2s - List of all virtual hub route table v2s associated with this VirtualHub.
34598	VirtualHubRouteTableV2s *[]VirtualHubRouteTableV2 `json:"virtualHubRouteTableV2s,omitempty"`
34599	// Sku - The sku of this VirtualHub.
34600	Sku *string `json:"sku,omitempty"`
34601	// RoutingState - The routing state. Possible values include: 'RoutingStateNone', 'RoutingStateProvisioned', 'RoutingStateProvisioning', 'RoutingStateFailed'
34602	RoutingState RoutingState `json:"routingState,omitempty"`
34603	// BgpConnections - READ-ONLY; List of references to Bgp Connections.
34604	BgpConnections *[]SubResource `json:"bgpConnections,omitempty"`
34605	// IPConfigurations - READ-ONLY; List of references to IpConfigurations.
34606	IPConfigurations *[]SubResource `json:"ipConfigurations,omitempty"`
34607	// VirtualRouterAsn - VirtualRouter ASN.
34608	VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"`
34609	// VirtualRouterIps - VirtualRouter IPs.
34610	VirtualRouterIps *[]string `json:"virtualRouterIps,omitempty"`
34611}
34612
34613// VirtualHubRoute virtualHub route.
34614type VirtualHubRoute struct {
34615	// AddressPrefixes - List of all addressPrefixes.
34616	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
34617	// NextHopIPAddress - NextHop ip address.
34618	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
34619}
34620
34621// VirtualHubRouteTable virtualHub route table.
34622type VirtualHubRouteTable struct {
34623	// Routes - List of all routes.
34624	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
34625}
34626
34627// VirtualHubRouteTableV2 virtualHubRouteTableV2 Resource.
34628type VirtualHubRouteTableV2 struct {
34629	autorest.Response `json:"-"`
34630	// VirtualHubRouteTableV2Properties - Properties of the virtual hub route table v2.
34631	*VirtualHubRouteTableV2Properties `json:"properties,omitempty"`
34632	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
34633	Name *string `json:"name,omitempty"`
34634	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34635	Etag *string `json:"etag,omitempty"`
34636	// ID - Resource ID.
34637	ID *string `json:"id,omitempty"`
34638}
34639
34640// MarshalJSON is the custom marshaler for VirtualHubRouteTableV2.
34641func (vhrtv VirtualHubRouteTableV2) MarshalJSON() ([]byte, error) {
34642	objectMap := make(map[string]interface{})
34643	if vhrtv.VirtualHubRouteTableV2Properties != nil {
34644		objectMap["properties"] = vhrtv.VirtualHubRouteTableV2Properties
34645	}
34646	if vhrtv.Name != nil {
34647		objectMap["name"] = vhrtv.Name
34648	}
34649	if vhrtv.ID != nil {
34650		objectMap["id"] = vhrtv.ID
34651	}
34652	return json.Marshal(objectMap)
34653}
34654
34655// UnmarshalJSON is the custom unmarshaler for VirtualHubRouteTableV2 struct.
34656func (vhrtv *VirtualHubRouteTableV2) UnmarshalJSON(body []byte) error {
34657	var m map[string]*json.RawMessage
34658	err := json.Unmarshal(body, &m)
34659	if err != nil {
34660		return err
34661	}
34662	for k, v := range m {
34663		switch k {
34664		case "properties":
34665			if v != nil {
34666				var virtualHubRouteTableV2Properties VirtualHubRouteTableV2Properties
34667				err = json.Unmarshal(*v, &virtualHubRouteTableV2Properties)
34668				if err != nil {
34669					return err
34670				}
34671				vhrtv.VirtualHubRouteTableV2Properties = &virtualHubRouteTableV2Properties
34672			}
34673		case "name":
34674			if v != nil {
34675				var name string
34676				err = json.Unmarshal(*v, &name)
34677				if err != nil {
34678					return err
34679				}
34680				vhrtv.Name = &name
34681			}
34682		case "etag":
34683			if v != nil {
34684				var etag string
34685				err = json.Unmarshal(*v, &etag)
34686				if err != nil {
34687					return err
34688				}
34689				vhrtv.Etag = &etag
34690			}
34691		case "id":
34692			if v != nil {
34693				var ID string
34694				err = json.Unmarshal(*v, &ID)
34695				if err != nil {
34696					return err
34697				}
34698				vhrtv.ID = &ID
34699			}
34700		}
34701	}
34702
34703	return nil
34704}
34705
34706// VirtualHubRouteTableV2Properties parameters for VirtualHubRouteTableV2.
34707type VirtualHubRouteTableV2Properties struct {
34708	// Routes - List of all routes.
34709	Routes *[]VirtualHubRouteV2 `json:"routes,omitempty"`
34710	// AttachedConnections - List of all connections attached to this route table v2.
34711	AttachedConnections *[]string `json:"attachedConnections,omitempty"`
34712	// ProvisioningState - READ-ONLY; The provisioning state of the virtual hub route table v2 resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34713	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34714}
34715
34716// VirtualHubRouteTableV2sCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
34717// a long-running operation.
34718type VirtualHubRouteTableV2sCreateOrUpdateFuture struct {
34719	azure.Future
34720}
34721
34722// Result returns the result of the asynchronous operation.
34723// If the operation has not completed it will return an error.
34724func (future *VirtualHubRouteTableV2sCreateOrUpdateFuture) Result(client VirtualHubRouteTableV2sClient) (vhrtv VirtualHubRouteTableV2, err error) {
34725	var done bool
34726	done, err = future.DoneWithContext(context.Background(), client)
34727	if err != nil {
34728		err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34729		return
34730	}
34731	if !done {
34732		err = azure.NewAsyncOpIncompleteError("network.VirtualHubRouteTableV2sCreateOrUpdateFuture")
34733		return
34734	}
34735	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34736	if vhrtv.Response.Response, err = future.GetResult(sender); err == nil && vhrtv.Response.Response.StatusCode != http.StatusNoContent {
34737		vhrtv, err = client.CreateOrUpdateResponder(vhrtv.Response.Response)
34738		if err != nil {
34739			err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sCreateOrUpdateFuture", "Result", vhrtv.Response.Response, "Failure responding to request")
34740		}
34741	}
34742	return
34743}
34744
34745// VirtualHubRouteTableV2sDeleteFuture an abstraction for monitoring and retrieving the results of a
34746// long-running operation.
34747type VirtualHubRouteTableV2sDeleteFuture struct {
34748	azure.Future
34749}
34750
34751// Result returns the result of the asynchronous operation.
34752// If the operation has not completed it will return an error.
34753func (future *VirtualHubRouteTableV2sDeleteFuture) Result(client VirtualHubRouteTableV2sClient) (ar autorest.Response, err error) {
34754	var done bool
34755	done, err = future.DoneWithContext(context.Background(), client)
34756	if err != nil {
34757		err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sDeleteFuture", "Result", future.Response(), "Polling failure")
34758		return
34759	}
34760	if !done {
34761		err = azure.NewAsyncOpIncompleteError("network.VirtualHubRouteTableV2sDeleteFuture")
34762		return
34763	}
34764	ar.Response = future.Response()
34765	return
34766}
34767
34768// VirtualHubRouteV2 virtualHubRouteTableV2 route.
34769type VirtualHubRouteV2 struct {
34770	// DestinationType - The type of destinations.
34771	DestinationType *string `json:"destinationType,omitempty"`
34772	// Destinations - List of all destinations.
34773	Destinations *[]string `json:"destinations,omitempty"`
34774	// NextHopType - The type of next hops.
34775	NextHopType *string `json:"nextHopType,omitempty"`
34776	// NextHops - NextHops ip address.
34777	NextHops *[]string `json:"nextHops,omitempty"`
34778}
34779
34780// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
34781// long-running operation.
34782type VirtualHubsCreateOrUpdateFuture struct {
34783	azure.Future
34784}
34785
34786// Result returns the result of the asynchronous operation.
34787// If the operation has not completed it will return an error.
34788func (future *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
34789	var done bool
34790	done, err = future.DoneWithContext(context.Background(), client)
34791	if err != nil {
34792		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
34793		return
34794	}
34795	if !done {
34796		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
34797		return
34798	}
34799	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34800	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
34801		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
34802		if err != nil {
34803			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
34804		}
34805	}
34806	return
34807}
34808
34809// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
34810// operation.
34811type VirtualHubsDeleteFuture struct {
34812	azure.Future
34813}
34814
34815// Result returns the result of the asynchronous operation.
34816// If the operation has not completed it will return an error.
34817func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
34818	var done bool
34819	done, err = future.DoneWithContext(context.Background(), client)
34820	if err != nil {
34821		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
34822		return
34823	}
34824	if !done {
34825		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
34826		return
34827	}
34828	ar.Response = future.Response()
34829	return
34830}
34831
34832// VirtualHubsGetEffectiveVirtualHubRoutesFuture an abstraction for monitoring and retrieving the results
34833// of a long-running operation.
34834type VirtualHubsGetEffectiveVirtualHubRoutesFuture struct {
34835	azure.Future
34836}
34837
34838// Result returns the result of the asynchronous operation.
34839// If the operation has not completed it will return an error.
34840func (future *VirtualHubsGetEffectiveVirtualHubRoutesFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
34841	var done bool
34842	done, err = future.DoneWithContext(context.Background(), client)
34843	if err != nil {
34844		err = autorest.NewErrorWithError(err, "network.VirtualHubsGetEffectiveVirtualHubRoutesFuture", "Result", future.Response(), "Polling failure")
34845		return
34846	}
34847	if !done {
34848		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsGetEffectiveVirtualHubRoutesFuture")
34849		return
34850	}
34851	ar.Response = future.Response()
34852	return
34853}
34854
34855// VirtualNetwork virtual Network resource.
34856type VirtualNetwork struct {
34857	autorest.Response `json:"-"`
34858	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
34859	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
34860	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34861	Etag *string `json:"etag,omitempty"`
34862	// ID - Resource ID.
34863	ID *string `json:"id,omitempty"`
34864	// Name - READ-ONLY; Resource name.
34865	Name *string `json:"name,omitempty"`
34866	// Type - READ-ONLY; Resource type.
34867	Type *string `json:"type,omitempty"`
34868	// Location - Resource location.
34869	Location *string `json:"location,omitempty"`
34870	// Tags - Resource tags.
34871	Tags map[string]*string `json:"tags"`
34872}
34873
34874// MarshalJSON is the custom marshaler for VirtualNetwork.
34875func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
34876	objectMap := make(map[string]interface{})
34877	if vn.VirtualNetworkPropertiesFormat != nil {
34878		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
34879	}
34880	if vn.ID != nil {
34881		objectMap["id"] = vn.ID
34882	}
34883	if vn.Location != nil {
34884		objectMap["location"] = vn.Location
34885	}
34886	if vn.Tags != nil {
34887		objectMap["tags"] = vn.Tags
34888	}
34889	return json.Marshal(objectMap)
34890}
34891
34892// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
34893func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
34894	var m map[string]*json.RawMessage
34895	err := json.Unmarshal(body, &m)
34896	if err != nil {
34897		return err
34898	}
34899	for k, v := range m {
34900		switch k {
34901		case "properties":
34902			if v != nil {
34903				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
34904				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
34905				if err != nil {
34906					return err
34907				}
34908				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
34909			}
34910		case "etag":
34911			if v != nil {
34912				var etag string
34913				err = json.Unmarshal(*v, &etag)
34914				if err != nil {
34915					return err
34916				}
34917				vn.Etag = &etag
34918			}
34919		case "id":
34920			if v != nil {
34921				var ID string
34922				err = json.Unmarshal(*v, &ID)
34923				if err != nil {
34924					return err
34925				}
34926				vn.ID = &ID
34927			}
34928		case "name":
34929			if v != nil {
34930				var name string
34931				err = json.Unmarshal(*v, &name)
34932				if err != nil {
34933					return err
34934				}
34935				vn.Name = &name
34936			}
34937		case "type":
34938			if v != nil {
34939				var typeVar string
34940				err = json.Unmarshal(*v, &typeVar)
34941				if err != nil {
34942					return err
34943				}
34944				vn.Type = &typeVar
34945			}
34946		case "location":
34947			if v != nil {
34948				var location string
34949				err = json.Unmarshal(*v, &location)
34950				if err != nil {
34951					return err
34952				}
34953				vn.Location = &location
34954			}
34955		case "tags":
34956			if v != nil {
34957				var tags map[string]*string
34958				err = json.Unmarshal(*v, &tags)
34959				if err != nil {
34960					return err
34961				}
34962				vn.Tags = tags
34963			}
34964		}
34965	}
34966
34967	return nil
34968}
34969
34970// VirtualNetworkBgpCommunities bgp Communities sent over ExpressRoute with each route corresponding to a
34971// prefix in this VNET.
34972type VirtualNetworkBgpCommunities struct {
34973	// VirtualNetworkCommunity - The BGP community associated with the virtual network.
34974	VirtualNetworkCommunity *string `json:"virtualNetworkCommunity,omitempty"`
34975	// RegionalCommunity - READ-ONLY; The BGP community associated with the region of the virtual network.
34976	RegionalCommunity *string `json:"regionalCommunity,omitempty"`
34977}
34978
34979// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
34980// resource.
34981type VirtualNetworkConnectionGatewayReference struct {
34982	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
34983	ID *string `json:"id,omitempty"`
34984}
34985
34986// VirtualNetworkGateway a common class for general resource information.
34987type VirtualNetworkGateway struct {
34988	autorest.Response `json:"-"`
34989	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
34990	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
34991	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34992	Etag *string `json:"etag,omitempty"`
34993	// ID - Resource ID.
34994	ID *string `json:"id,omitempty"`
34995	// Name - READ-ONLY; Resource name.
34996	Name *string `json:"name,omitempty"`
34997	// Type - READ-ONLY; Resource type.
34998	Type *string `json:"type,omitempty"`
34999	// Location - Resource location.
35000	Location *string `json:"location,omitempty"`
35001	// Tags - Resource tags.
35002	Tags map[string]*string `json:"tags"`
35003}
35004
35005// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
35006func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
35007	objectMap := make(map[string]interface{})
35008	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
35009		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
35010	}
35011	if vng.ID != nil {
35012		objectMap["id"] = vng.ID
35013	}
35014	if vng.Location != nil {
35015		objectMap["location"] = vng.Location
35016	}
35017	if vng.Tags != nil {
35018		objectMap["tags"] = vng.Tags
35019	}
35020	return json.Marshal(objectMap)
35021}
35022
35023// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
35024func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
35025	var m map[string]*json.RawMessage
35026	err := json.Unmarshal(body, &m)
35027	if err != nil {
35028		return err
35029	}
35030	for k, v := range m {
35031		switch k {
35032		case "properties":
35033			if v != nil {
35034				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
35035				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
35036				if err != nil {
35037					return err
35038				}
35039				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
35040			}
35041		case "etag":
35042			if v != nil {
35043				var etag string
35044				err = json.Unmarshal(*v, &etag)
35045				if err != nil {
35046					return err
35047				}
35048				vng.Etag = &etag
35049			}
35050		case "id":
35051			if v != nil {
35052				var ID string
35053				err = json.Unmarshal(*v, &ID)
35054				if err != nil {
35055					return err
35056				}
35057				vng.ID = &ID
35058			}
35059		case "name":
35060			if v != nil {
35061				var name string
35062				err = json.Unmarshal(*v, &name)
35063				if err != nil {
35064					return err
35065				}
35066				vng.Name = &name
35067			}
35068		case "type":
35069			if v != nil {
35070				var typeVar string
35071				err = json.Unmarshal(*v, &typeVar)
35072				if err != nil {
35073					return err
35074				}
35075				vng.Type = &typeVar
35076			}
35077		case "location":
35078			if v != nil {
35079				var location string
35080				err = json.Unmarshal(*v, &location)
35081				if err != nil {
35082					return err
35083				}
35084				vng.Location = &location
35085			}
35086		case "tags":
35087			if v != nil {
35088				var tags map[string]*string
35089				err = json.Unmarshal(*v, &tags)
35090				if err != nil {
35091					return err
35092				}
35093				vng.Tags = tags
35094			}
35095		}
35096	}
35097
35098	return nil
35099}
35100
35101// VirtualNetworkGatewayConnection a common class for general resource information.
35102type VirtualNetworkGatewayConnection struct {
35103	autorest.Response `json:"-"`
35104	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
35105	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
35106	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35107	Etag *string `json:"etag,omitempty"`
35108	// ID - Resource ID.
35109	ID *string `json:"id,omitempty"`
35110	// Name - READ-ONLY; Resource name.
35111	Name *string `json:"name,omitempty"`
35112	// Type - READ-ONLY; Resource type.
35113	Type *string `json:"type,omitempty"`
35114	// Location - Resource location.
35115	Location *string `json:"location,omitempty"`
35116	// Tags - Resource tags.
35117	Tags map[string]*string `json:"tags"`
35118}
35119
35120// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
35121func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
35122	objectMap := make(map[string]interface{})
35123	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
35124		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
35125	}
35126	if vngc.ID != nil {
35127		objectMap["id"] = vngc.ID
35128	}
35129	if vngc.Location != nil {
35130		objectMap["location"] = vngc.Location
35131	}
35132	if vngc.Tags != nil {
35133		objectMap["tags"] = vngc.Tags
35134	}
35135	return json.Marshal(objectMap)
35136}
35137
35138// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
35139func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
35140	var m map[string]*json.RawMessage
35141	err := json.Unmarshal(body, &m)
35142	if err != nil {
35143		return err
35144	}
35145	for k, v := range m {
35146		switch k {
35147		case "properties":
35148			if v != nil {
35149				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
35150				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
35151				if err != nil {
35152					return err
35153				}
35154				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
35155			}
35156		case "etag":
35157			if v != nil {
35158				var etag string
35159				err = json.Unmarshal(*v, &etag)
35160				if err != nil {
35161					return err
35162				}
35163				vngc.Etag = &etag
35164			}
35165		case "id":
35166			if v != nil {
35167				var ID string
35168				err = json.Unmarshal(*v, &ID)
35169				if err != nil {
35170					return err
35171				}
35172				vngc.ID = &ID
35173			}
35174		case "name":
35175			if v != nil {
35176				var name string
35177				err = json.Unmarshal(*v, &name)
35178				if err != nil {
35179					return err
35180				}
35181				vngc.Name = &name
35182			}
35183		case "type":
35184			if v != nil {
35185				var typeVar string
35186				err = json.Unmarshal(*v, &typeVar)
35187				if err != nil {
35188					return err
35189				}
35190				vngc.Type = &typeVar
35191			}
35192		case "location":
35193			if v != nil {
35194				var location string
35195				err = json.Unmarshal(*v, &location)
35196				if err != nil {
35197					return err
35198				}
35199				vngc.Location = &location
35200			}
35201		case "tags":
35202			if v != nil {
35203				var tags map[string]*string
35204				err = json.Unmarshal(*v, &tags)
35205				if err != nil {
35206					return err
35207				}
35208				vngc.Tags = tags
35209			}
35210		}
35211	}
35212
35213	return nil
35214}
35215
35216// VirtualNetworkGatewayConnectionListEntity a common class for general resource information.
35217type VirtualNetworkGatewayConnectionListEntity struct {
35218	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
35219	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
35220	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35221	Etag *string `json:"etag,omitempty"`
35222	// ID - Resource ID.
35223	ID *string `json:"id,omitempty"`
35224	// Name - READ-ONLY; Resource name.
35225	Name *string `json:"name,omitempty"`
35226	// Type - READ-ONLY; Resource type.
35227	Type *string `json:"type,omitempty"`
35228	// Location - Resource location.
35229	Location *string `json:"location,omitempty"`
35230	// Tags - Resource tags.
35231	Tags map[string]*string `json:"tags"`
35232}
35233
35234// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
35235func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
35236	objectMap := make(map[string]interface{})
35237	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
35238		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
35239	}
35240	if vngcle.ID != nil {
35241		objectMap["id"] = vngcle.ID
35242	}
35243	if vngcle.Location != nil {
35244		objectMap["location"] = vngcle.Location
35245	}
35246	if vngcle.Tags != nil {
35247		objectMap["tags"] = vngcle.Tags
35248	}
35249	return json.Marshal(objectMap)
35250}
35251
35252// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
35253func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
35254	var m map[string]*json.RawMessage
35255	err := json.Unmarshal(body, &m)
35256	if err != nil {
35257		return err
35258	}
35259	for k, v := range m {
35260		switch k {
35261		case "properties":
35262			if v != nil {
35263				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
35264				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
35265				if err != nil {
35266					return err
35267				}
35268				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
35269			}
35270		case "etag":
35271			if v != nil {
35272				var etag string
35273				err = json.Unmarshal(*v, &etag)
35274				if err != nil {
35275					return err
35276				}
35277				vngcle.Etag = &etag
35278			}
35279		case "id":
35280			if v != nil {
35281				var ID string
35282				err = json.Unmarshal(*v, &ID)
35283				if err != nil {
35284					return err
35285				}
35286				vngcle.ID = &ID
35287			}
35288		case "name":
35289			if v != nil {
35290				var name string
35291				err = json.Unmarshal(*v, &name)
35292				if err != nil {
35293					return err
35294				}
35295				vngcle.Name = &name
35296			}
35297		case "type":
35298			if v != nil {
35299				var typeVar string
35300				err = json.Unmarshal(*v, &typeVar)
35301				if err != nil {
35302					return err
35303				}
35304				vngcle.Type = &typeVar
35305			}
35306		case "location":
35307			if v != nil {
35308				var location string
35309				err = json.Unmarshal(*v, &location)
35310				if err != nil {
35311					return err
35312				}
35313				vngcle.Location = &location
35314			}
35315		case "tags":
35316			if v != nil {
35317				var tags map[string]*string
35318				err = json.Unmarshal(*v, &tags)
35319				if err != nil {
35320					return err
35321				}
35322				vngcle.Tags = tags
35323			}
35324		}
35325	}
35326
35327	return nil
35328}
35329
35330// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties.
35331type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
35332	// AuthorizationKey - The authorizationKey.
35333	AuthorizationKey *string `json:"authorizationKey,omitempty"`
35334	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
35335	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
35336	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
35337	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
35338	// LocalNetworkGateway2 - The reference to local network gateway resource.
35339	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
35340	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
35341	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
35342	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
35343	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
35344	// RoutingWeight - The routing weight.
35345	RoutingWeight *int32 `json:"routingWeight,omitempty"`
35346	// SharedKey - The IPSec shared key.
35347	SharedKey *string `json:"sharedKey,omitempty"`
35348	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
35349	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
35350	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
35351	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
35352	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
35353	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
35354	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
35355	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
35356	// Peer - The reference to peerings resource.
35357	Peer *SubResource `json:"peer,omitempty"`
35358	// EnableBgp - EnableBgp flag.
35359	EnableBgp *bool `json:"enableBgp,omitempty"`
35360	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
35361	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
35362	// IpsecPolicies - The IPSec Policies to be considered by this connection.
35363	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
35364	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
35365	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
35366	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway connection resource.
35367	ResourceGUID *string `json:"resourceGuid,omitempty"`
35368	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35369	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35370	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
35371	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
35372}
35373
35374// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
35375// service call.
35376type VirtualNetworkGatewayConnectionListResult struct {
35377	autorest.Response `json:"-"`
35378	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
35379	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
35380	// NextLink - READ-ONLY; The URL to get the next set of results.
35381	NextLink *string `json:"nextLink,omitempty"`
35382}
35383
35384// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
35385// VirtualNetworkGatewayConnection values.
35386type VirtualNetworkGatewayConnectionListResultIterator struct {
35387	i    int
35388	page VirtualNetworkGatewayConnectionListResultPage
35389}
35390
35391// NextWithContext advances to the next value.  If there was an error making
35392// the request the iterator does not advance and the error is returned.
35393func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
35394	if tracing.IsEnabled() {
35395		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
35396		defer func() {
35397			sc := -1
35398			if iter.Response().Response.Response != nil {
35399				sc = iter.Response().Response.Response.StatusCode
35400			}
35401			tracing.EndSpan(ctx, sc, err)
35402		}()
35403	}
35404	iter.i++
35405	if iter.i < len(iter.page.Values()) {
35406		return nil
35407	}
35408	err = iter.page.NextWithContext(ctx)
35409	if err != nil {
35410		iter.i--
35411		return err
35412	}
35413	iter.i = 0
35414	return nil
35415}
35416
35417// Next advances to the next value.  If there was an error making
35418// the request the iterator does not advance and the error is returned.
35419// Deprecated: Use NextWithContext() instead.
35420func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
35421	return iter.NextWithContext(context.Background())
35422}
35423
35424// NotDone returns true if the enumeration should be started or is not yet complete.
35425func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
35426	return iter.page.NotDone() && iter.i < len(iter.page.Values())
35427}
35428
35429// Response returns the raw server response from the last page request.
35430func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
35431	return iter.page.Response()
35432}
35433
35434// Value returns the current value or a zero-initialized value if the
35435// iterator has advanced beyond the end of the collection.
35436func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
35437	if !iter.page.NotDone() {
35438		return VirtualNetworkGatewayConnection{}
35439	}
35440	return iter.page.Values()[iter.i]
35441}
35442
35443// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
35444func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
35445	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
35446}
35447
35448// IsEmpty returns true if the ListResult contains no values.
35449func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
35450	return vngclr.Value == nil || len(*vngclr.Value) == 0
35451}
35452
35453// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
35454// It returns nil if no more results exist.
35455func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
35456	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
35457		return nil, nil
35458	}
35459	return autorest.Prepare((&http.Request{}).WithContext(ctx),
35460		autorest.AsJSON(),
35461		autorest.AsGet(),
35462		autorest.WithBaseURL(to.String(vngclr.NextLink)))
35463}
35464
35465// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
35466type VirtualNetworkGatewayConnectionListResultPage struct {
35467	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
35468	vngclr VirtualNetworkGatewayConnectionListResult
35469}
35470
35471// NextWithContext advances to the next page of values.  If there was an error making
35472// the request the page does not advance and the error is returned.
35473func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
35474	if tracing.IsEnabled() {
35475		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
35476		defer func() {
35477			sc := -1
35478			if page.Response().Response.Response != nil {
35479				sc = page.Response().Response.Response.StatusCode
35480			}
35481			tracing.EndSpan(ctx, sc, err)
35482		}()
35483	}
35484	next, err := page.fn(ctx, page.vngclr)
35485	if err != nil {
35486		return err
35487	}
35488	page.vngclr = next
35489	return nil
35490}
35491
35492// Next advances to the next page of values.  If there was an error making
35493// the request the page does not advance and the error is returned.
35494// Deprecated: Use NextWithContext() instead.
35495func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
35496	return page.NextWithContext(context.Background())
35497}
35498
35499// NotDone returns true if the page enumeration should be started or is not yet complete.
35500func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
35501	return !page.vngclr.IsEmpty()
35502}
35503
35504// Response returns the raw server response from the last page request.
35505func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
35506	return page.vngclr
35507}
35508
35509// Values returns the slice of values for the current page or nil if there are no values.
35510func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
35511	if page.vngclr.IsEmpty() {
35512		return nil
35513	}
35514	return *page.vngclr.Value
35515}
35516
35517// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
35518func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
35519	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
35520}
35521
35522// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties.
35523type VirtualNetworkGatewayConnectionPropertiesFormat struct {
35524	// AuthorizationKey - The authorizationKey.
35525	AuthorizationKey *string `json:"authorizationKey,omitempty"`
35526	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
35527	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
35528	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
35529	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
35530	// LocalNetworkGateway2 - The reference to local network gateway resource.
35531	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
35532	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
35533	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
35534	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
35535	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
35536	// RoutingWeight - The routing weight.
35537	RoutingWeight *int32 `json:"routingWeight,omitempty"`
35538	// DpdTimeoutSeconds - The dead peer detection timeout of this connection in seconds.
35539	DpdTimeoutSeconds *int32 `json:"dpdTimeoutSeconds,omitempty"`
35540	// SharedKey - The IPSec shared key.
35541	SharedKey *string `json:"sharedKey,omitempty"`
35542	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
35543	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
35544	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
35545	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
35546	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
35547	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
35548	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
35549	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
35550	// Peer - The reference to peerings resource.
35551	Peer *SubResource `json:"peer,omitempty"`
35552	// EnableBgp - EnableBgp flag.
35553	EnableBgp *bool `json:"enableBgp,omitempty"`
35554	// UseLocalAzureIPAddress - Use private local Azure IP for the connection.
35555	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
35556	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
35557	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
35558	// IpsecPolicies - The IPSec Policies to be considered by this connection.
35559	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
35560	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
35561	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
35562	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway connection resource.
35563	ResourceGUID *string `json:"resourceGuid,omitempty"`
35564	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35565	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35566	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
35567	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
35568}
35569
35570// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
35571// results of a long-running operation.
35572type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
35573	azure.Future
35574}
35575
35576// Result returns the result of the asynchronous operation.
35577// If the operation has not completed it will return an error.
35578func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
35579	var done bool
35580	done, err = future.DoneWithContext(context.Background(), client)
35581	if err != nil {
35582		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
35583		return
35584	}
35585	if !done {
35586		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
35587		return
35588	}
35589	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35590	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
35591		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
35592		if err != nil {
35593			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
35594		}
35595	}
35596	return
35597}
35598
35599// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
35600// a long-running operation.
35601type VirtualNetworkGatewayConnectionsDeleteFuture struct {
35602	azure.Future
35603}
35604
35605// Result returns the result of the asynchronous operation.
35606// If the operation has not completed it will return an error.
35607func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
35608	var done bool
35609	done, err = future.DoneWithContext(context.Background(), client)
35610	if err != nil {
35611		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
35612		return
35613	}
35614	if !done {
35615		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
35616		return
35617	}
35618	ar.Response = future.Response()
35619	return
35620}
35621
35622// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
35623// results of a long-running operation.
35624type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
35625	azure.Future
35626}
35627
35628// Result returns the result of the asynchronous operation.
35629// If the operation has not completed it will return an error.
35630func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
35631	var done bool
35632	done, err = future.DoneWithContext(context.Background(), client)
35633	if err != nil {
35634		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
35635		return
35636	}
35637	if !done {
35638		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
35639		return
35640	}
35641	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35642	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
35643		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
35644		if err != nil {
35645			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
35646		}
35647	}
35648	return
35649}
35650
35651// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
35652// results of a long-running operation.
35653type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
35654	azure.Future
35655}
35656
35657// Result returns the result of the asynchronous operation.
35658// If the operation has not completed it will return an error.
35659func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
35660	var done bool
35661	done, err = future.DoneWithContext(context.Background(), client)
35662	if err != nil {
35663		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
35664		return
35665	}
35666	if !done {
35667		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
35668		return
35669	}
35670	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35671	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
35672		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
35673		if err != nil {
35674			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
35675		}
35676	}
35677	return
35678}
35679
35680// VirtualNetworkGatewayConnectionsStartPacketCaptureFuture an abstraction for monitoring and retrieving
35681// the results of a long-running operation.
35682type VirtualNetworkGatewayConnectionsStartPacketCaptureFuture struct {
35683	azure.Future
35684}
35685
35686// Result returns the result of the asynchronous operation.
35687// If the operation has not completed it will return an error.
35688func (future *VirtualNetworkGatewayConnectionsStartPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
35689	var done bool
35690	done, err = future.DoneWithContext(context.Background(), client)
35691	if err != nil {
35692		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
35693		return
35694	}
35695	if !done {
35696		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture")
35697		return
35698	}
35699	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35700	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
35701		s, err = client.StartPacketCaptureResponder(s.Response.Response)
35702		if err != nil {
35703			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
35704		}
35705	}
35706	return
35707}
35708
35709// VirtualNetworkGatewayConnectionsStopPacketCaptureFuture an abstraction for monitoring and retrieving the
35710// results of a long-running operation.
35711type VirtualNetworkGatewayConnectionsStopPacketCaptureFuture struct {
35712	azure.Future
35713}
35714
35715// Result returns the result of the asynchronous operation.
35716// If the operation has not completed it will return an error.
35717func (future *VirtualNetworkGatewayConnectionsStopPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
35718	var done bool
35719	done, err = future.DoneWithContext(context.Background(), client)
35720	if err != nil {
35721		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
35722		return
35723	}
35724	if !done {
35725		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture")
35726		return
35727	}
35728	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35729	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
35730		s, err = client.StopPacketCaptureResponder(s.Response.Response)
35731		if err != nil {
35732			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
35733		}
35734	}
35735	return
35736}
35737
35738// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
35739// results of a long-running operation.
35740type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
35741	azure.Future
35742}
35743
35744// Result returns the result of the asynchronous operation.
35745// If the operation has not completed it will return an error.
35746func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
35747	var done bool
35748	done, err = future.DoneWithContext(context.Background(), client)
35749	if err != nil {
35750		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
35751		return
35752	}
35753	if !done {
35754		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
35755		return
35756	}
35757	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
35758	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
35759		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
35760		if err != nil {
35761			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
35762		}
35763	}
35764	return
35765}
35766
35767// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway.
35768type VirtualNetworkGatewayIPConfiguration struct {
35769	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
35770	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
35771	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
35772	Name *string `json:"name,omitempty"`
35773	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
35774	Etag *string `json:"etag,omitempty"`
35775	// ID - Resource ID.
35776	ID *string `json:"id,omitempty"`
35777}
35778
35779// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
35780func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
35781	objectMap := make(map[string]interface{})
35782	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
35783		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
35784	}
35785	if vngic.Name != nil {
35786		objectMap["name"] = vngic.Name
35787	}
35788	if vngic.ID != nil {
35789		objectMap["id"] = vngic.ID
35790	}
35791	return json.Marshal(objectMap)
35792}
35793
35794// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
35795func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
35796	var m map[string]*json.RawMessage
35797	err := json.Unmarshal(body, &m)
35798	if err != nil {
35799		return err
35800	}
35801	for k, v := range m {
35802		switch k {
35803		case "properties":
35804			if v != nil {
35805				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
35806				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
35807				if err != nil {
35808					return err
35809				}
35810				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
35811			}
35812		case "name":
35813			if v != nil {
35814				var name string
35815				err = json.Unmarshal(*v, &name)
35816				if err != nil {
35817					return err
35818				}
35819				vngic.Name = &name
35820			}
35821		case "etag":
35822			if v != nil {
35823				var etag string
35824				err = json.Unmarshal(*v, &etag)
35825				if err != nil {
35826					return err
35827				}
35828				vngic.Etag = &etag
35829			}
35830		case "id":
35831			if v != nil {
35832				var ID string
35833				err = json.Unmarshal(*v, &ID)
35834				if err != nil {
35835					return err
35836				}
35837				vngic.ID = &ID
35838			}
35839		}
35840	}
35841
35842	return nil
35843}
35844
35845// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration.
35846type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
35847	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
35848	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
35849	// Subnet - The reference to the subnet resource.
35850	Subnet *SubResource `json:"subnet,omitempty"`
35851	// PublicIPAddress - The reference to the public IP resource.
35852	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
35853	// PrivateIPAddress - READ-ONLY; Private IP Address for this gateway.
35854	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
35855	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
35856	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
35857}
35858
35859// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
35860// service call.
35861type VirtualNetworkGatewayListConnectionsResult struct {
35862	autorest.Response `json:"-"`
35863	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
35864	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
35865	// NextLink - READ-ONLY; The URL to get the next set of results.
35866	NextLink *string `json:"nextLink,omitempty"`
35867}
35868
35869// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
35870// VirtualNetworkGatewayConnectionListEntity values.
35871type VirtualNetworkGatewayListConnectionsResultIterator struct {
35872	i    int
35873	page VirtualNetworkGatewayListConnectionsResultPage
35874}
35875
35876// NextWithContext advances to the next value.  If there was an error making
35877// the request the iterator does not advance and the error is returned.
35878func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
35879	if tracing.IsEnabled() {
35880		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
35881		defer func() {
35882			sc := -1
35883			if iter.Response().Response.Response != nil {
35884				sc = iter.Response().Response.Response.StatusCode
35885			}
35886			tracing.EndSpan(ctx, sc, err)
35887		}()
35888	}
35889	iter.i++
35890	if iter.i < len(iter.page.Values()) {
35891		return nil
35892	}
35893	err = iter.page.NextWithContext(ctx)
35894	if err != nil {
35895		iter.i--
35896		return err
35897	}
35898	iter.i = 0
35899	return nil
35900}
35901
35902// Next advances to the next value.  If there was an error making
35903// the request the iterator does not advance and the error is returned.
35904// Deprecated: Use NextWithContext() instead.
35905func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
35906	return iter.NextWithContext(context.Background())
35907}
35908
35909// NotDone returns true if the enumeration should be started or is not yet complete.
35910func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
35911	return iter.page.NotDone() && iter.i < len(iter.page.Values())
35912}
35913
35914// Response returns the raw server response from the last page request.
35915func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
35916	return iter.page.Response()
35917}
35918
35919// Value returns the current value or a zero-initialized value if the
35920// iterator has advanced beyond the end of the collection.
35921func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
35922	if !iter.page.NotDone() {
35923		return VirtualNetworkGatewayConnectionListEntity{}
35924	}
35925	return iter.page.Values()[iter.i]
35926}
35927
35928// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
35929func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
35930	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
35931}
35932
35933// IsEmpty returns true if the ListResult contains no values.
35934func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
35935	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
35936}
35937
35938// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
35939// It returns nil if no more results exist.
35940func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
35941	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
35942		return nil, nil
35943	}
35944	return autorest.Prepare((&http.Request{}).WithContext(ctx),
35945		autorest.AsJSON(),
35946		autorest.AsGet(),
35947		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
35948}
35949
35950// VirtualNetworkGatewayListConnectionsResultPage contains a page of
35951// VirtualNetworkGatewayConnectionListEntity values.
35952type VirtualNetworkGatewayListConnectionsResultPage struct {
35953	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
35954	vnglcr VirtualNetworkGatewayListConnectionsResult
35955}
35956
35957// NextWithContext advances to the next page of values.  If there was an error making
35958// the request the page does not advance and the error is returned.
35959func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
35960	if tracing.IsEnabled() {
35961		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
35962		defer func() {
35963			sc := -1
35964			if page.Response().Response.Response != nil {
35965				sc = page.Response().Response.Response.StatusCode
35966			}
35967			tracing.EndSpan(ctx, sc, err)
35968		}()
35969	}
35970	next, err := page.fn(ctx, page.vnglcr)
35971	if err != nil {
35972		return err
35973	}
35974	page.vnglcr = next
35975	return nil
35976}
35977
35978// Next advances to the next page of values.  If there was an error making
35979// the request the page does not advance and the error is returned.
35980// Deprecated: Use NextWithContext() instead.
35981func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
35982	return page.NextWithContext(context.Background())
35983}
35984
35985// NotDone returns true if the page enumeration should be started or is not yet complete.
35986func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
35987	return !page.vnglcr.IsEmpty()
35988}
35989
35990// Response returns the raw server response from the last page request.
35991func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
35992	return page.vnglcr
35993}
35994
35995// Values returns the slice of values for the current page or nil if there are no values.
35996func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
35997	if page.vnglcr.IsEmpty() {
35998		return nil
35999	}
36000	return *page.vnglcr.Value
36001}
36002
36003// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
36004func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
36005	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
36006}
36007
36008// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
36009type VirtualNetworkGatewayListResult struct {
36010	autorest.Response `json:"-"`
36011	// Value - A list of VirtualNetworkGateway resources that exists in a resource group.
36012	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
36013	// NextLink - READ-ONLY; The URL to get the next set of results.
36014	NextLink *string `json:"nextLink,omitempty"`
36015}
36016
36017// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
36018// values.
36019type VirtualNetworkGatewayListResultIterator struct {
36020	i    int
36021	page VirtualNetworkGatewayListResultPage
36022}
36023
36024// NextWithContext advances to the next value.  If there was an error making
36025// the request the iterator does not advance and the error is returned.
36026func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
36027	if tracing.IsEnabled() {
36028		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
36029		defer func() {
36030			sc := -1
36031			if iter.Response().Response.Response != nil {
36032				sc = iter.Response().Response.Response.StatusCode
36033			}
36034			tracing.EndSpan(ctx, sc, err)
36035		}()
36036	}
36037	iter.i++
36038	if iter.i < len(iter.page.Values()) {
36039		return nil
36040	}
36041	err = iter.page.NextWithContext(ctx)
36042	if err != nil {
36043		iter.i--
36044		return err
36045	}
36046	iter.i = 0
36047	return nil
36048}
36049
36050// Next advances to the next value.  If there was an error making
36051// the request the iterator does not advance and the error is returned.
36052// Deprecated: Use NextWithContext() instead.
36053func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
36054	return iter.NextWithContext(context.Background())
36055}
36056
36057// NotDone returns true if the enumeration should be started or is not yet complete.
36058func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
36059	return iter.page.NotDone() && iter.i < len(iter.page.Values())
36060}
36061
36062// Response returns the raw server response from the last page request.
36063func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
36064	return iter.page.Response()
36065}
36066
36067// Value returns the current value or a zero-initialized value if the
36068// iterator has advanced beyond the end of the collection.
36069func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
36070	if !iter.page.NotDone() {
36071		return VirtualNetworkGateway{}
36072	}
36073	return iter.page.Values()[iter.i]
36074}
36075
36076// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
36077func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
36078	return VirtualNetworkGatewayListResultIterator{page: page}
36079}
36080
36081// IsEmpty returns true if the ListResult contains no values.
36082func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
36083	return vnglr.Value == nil || len(*vnglr.Value) == 0
36084}
36085
36086// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
36087// It returns nil if no more results exist.
36088func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
36089	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
36090		return nil, nil
36091	}
36092	return autorest.Prepare((&http.Request{}).WithContext(ctx),
36093		autorest.AsJSON(),
36094		autorest.AsGet(),
36095		autorest.WithBaseURL(to.String(vnglr.NextLink)))
36096}
36097
36098// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
36099type VirtualNetworkGatewayListResultPage struct {
36100	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
36101	vnglr VirtualNetworkGatewayListResult
36102}
36103
36104// NextWithContext advances to the next page of values.  If there was an error making
36105// the request the page does not advance and the error is returned.
36106func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
36107	if tracing.IsEnabled() {
36108		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
36109		defer func() {
36110			sc := -1
36111			if page.Response().Response.Response != nil {
36112				sc = page.Response().Response.Response.StatusCode
36113			}
36114			tracing.EndSpan(ctx, sc, err)
36115		}()
36116	}
36117	next, err := page.fn(ctx, page.vnglr)
36118	if err != nil {
36119		return err
36120	}
36121	page.vnglr = next
36122	return nil
36123}
36124
36125// Next advances to the next page of values.  If there was an error making
36126// the request the page does not advance and the error is returned.
36127// Deprecated: Use NextWithContext() instead.
36128func (page *VirtualNetworkGatewayListResultPage) Next() error {
36129	return page.NextWithContext(context.Background())
36130}
36131
36132// NotDone returns true if the page enumeration should be started or is not yet complete.
36133func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
36134	return !page.vnglr.IsEmpty()
36135}
36136
36137// Response returns the raw server response from the last page request.
36138func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
36139	return page.vnglr
36140}
36141
36142// Values returns the slice of values for the current page or nil if there are no values.
36143func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
36144	if page.vnglr.IsEmpty() {
36145		return nil
36146	}
36147	return *page.vnglr.Value
36148}
36149
36150// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
36151func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
36152	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
36153}
36154
36155// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties.
36156type VirtualNetworkGatewayPropertiesFormat struct {
36157	// IPConfigurations - IP configurations for virtual network gateway.
36158	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
36159	// GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
36160	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
36161	// VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased'
36162	VpnType VpnType `json:"vpnType,omitempty"`
36163	// VpnGatewayGeneration - The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN. Possible values include: 'VpnGatewayGenerationNone', 'VpnGatewayGenerationGeneration1', 'VpnGatewayGenerationGeneration2'
36164	VpnGatewayGeneration VpnGatewayGeneration `json:"vpnGatewayGeneration,omitempty"`
36165	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
36166	EnableBgp *bool `json:"enableBgp,omitempty"`
36167	// EnablePrivateIPAddress - Whether private IP needs to be enabled on this gateway for connections or not.
36168	EnablePrivateIPAddress *bool `json:"enablePrivateIpAddress,omitempty"`
36169	// ActiveActive - ActiveActive flag.
36170	ActiveActive *bool `json:"activeActive,omitempty"`
36171	// GatewayDefaultSite - The reference to the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.
36172	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
36173	// Sku - The reference to the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
36174	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
36175	// VpnClientConfiguration - The reference to the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
36176	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
36177	// BgpSettings - Virtual network gateway's BGP speaker settings.
36178	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
36179	// CustomRoutes - The reference to the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.
36180	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
36181	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway resource.
36182	ResourceGUID *string `json:"resourceGuid,omitempty"`
36183	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
36184	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
36185	// EnableDNSForwarding - Whether dns forwarding is enabled or not.
36186	EnableDNSForwarding *bool `json:"enableDnsForwarding,omitempty"`
36187	// InboundDNSForwardingEndpoint - READ-ONLY; The IP address allocated by the gateway to which dns requests can be sent.
36188	InboundDNSForwardingEndpoint *string `json:"inboundDnsForwardingEndpoint,omitempty"`
36189}
36190
36191// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
36192// long-running operation.
36193type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
36194	azure.Future
36195}
36196
36197// Result returns the result of the asynchronous operation.
36198// If the operation has not completed it will return an error.
36199func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
36200	var done bool
36201	done, err = future.DoneWithContext(context.Background(), client)
36202	if err != nil {
36203		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
36204		return
36205	}
36206	if !done {
36207		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
36208		return
36209	}
36210	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36211	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
36212		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
36213		if err != nil {
36214			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
36215		}
36216	}
36217	return
36218}
36219
36220// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
36221// long-running operation.
36222type VirtualNetworkGatewaysDeleteFuture struct {
36223	azure.Future
36224}
36225
36226// Result returns the result of the asynchronous operation.
36227// If the operation has not completed it will return an error.
36228func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
36229	var done bool
36230	done, err = future.DoneWithContext(context.Background(), client)
36231	if err != nil {
36232		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
36233		return
36234	}
36235	if !done {
36236		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
36237		return
36238	}
36239	ar.Response = future.Response()
36240	return
36241}
36242
36243// VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture an abstraction for monitoring
36244// and retrieving the results of a long-running operation.
36245type VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture struct {
36246	azure.Future
36247}
36248
36249// Result returns the result of the asynchronous operation.
36250// If the operation has not completed it will return an error.
36251func (future *VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
36252	var done bool
36253	done, err = future.DoneWithContext(context.Background(), client)
36254	if err != nil {
36255		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
36256		return
36257	}
36258	if !done {
36259		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture")
36260		return
36261	}
36262	ar.Response = future.Response()
36263	return
36264}
36265
36266// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
36267// results of a long-running operation.
36268type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
36269	azure.Future
36270}
36271
36272// Result returns the result of the asynchronous operation.
36273// If the operation has not completed it will return an error.
36274func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
36275	var done bool
36276	done, err = future.DoneWithContext(context.Background(), client)
36277	if err != nil {
36278		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
36279		return
36280	}
36281	if !done {
36282		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
36283		return
36284	}
36285	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36286	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
36287		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
36288		if err != nil {
36289			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
36290		}
36291	}
36292	return
36293}
36294
36295// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
36296// of a long-running operation.
36297type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
36298	azure.Future
36299}
36300
36301// Result returns the result of the asynchronous operation.
36302// If the operation has not completed it will return an error.
36303func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
36304	var done bool
36305	done, err = future.DoneWithContext(context.Background(), client)
36306	if err != nil {
36307		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
36308		return
36309	}
36310	if !done {
36311		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
36312		return
36313	}
36314	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36315	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
36316		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
36317		if err != nil {
36318			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
36319		}
36320	}
36321	return
36322}
36323
36324// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
36325// of a long-running operation.
36326type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
36327	azure.Future
36328}
36329
36330// Result returns the result of the asynchronous operation.
36331// If the operation has not completed it will return an error.
36332func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
36333	var done bool
36334	done, err = future.DoneWithContext(context.Background(), client)
36335	if err != nil {
36336		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
36337		return
36338	}
36339	if !done {
36340		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
36341		return
36342	}
36343	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36344	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
36345		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
36346		if err != nil {
36347			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
36348		}
36349	}
36350	return
36351}
36352
36353// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
36354// a long-running operation.
36355type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
36356	azure.Future
36357}
36358
36359// Result returns the result of the asynchronous operation.
36360// If the operation has not completed it will return an error.
36361func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
36362	var done bool
36363	done, err = future.DoneWithContext(context.Background(), client)
36364	if err != nil {
36365		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
36366		return
36367	}
36368	if !done {
36369		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
36370		return
36371	}
36372	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36373	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
36374		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
36375		if err != nil {
36376			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
36377		}
36378	}
36379	return
36380}
36381
36382// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
36383// a long-running operation.
36384type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
36385	azure.Future
36386}
36387
36388// Result returns the result of the asynchronous operation.
36389// If the operation has not completed it will return an error.
36390func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
36391	var done bool
36392	done, err = future.DoneWithContext(context.Background(), client)
36393	if err != nil {
36394		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
36395		return
36396	}
36397	if !done {
36398		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
36399		return
36400	}
36401	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36402	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
36403		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
36404		if err != nil {
36405			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
36406		}
36407	}
36408	return
36409}
36410
36411// VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture an abstraction for monitoring and retrieving
36412// the results of a long-running operation.
36413type VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture struct {
36414	azure.Future
36415}
36416
36417// Result returns the result of the asynchronous operation.
36418// If the operation has not completed it will return an error.
36419func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) Result(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
36420	var done bool
36421	done, err = future.DoneWithContext(context.Background(), client)
36422	if err != nil {
36423		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
36424		return
36425	}
36426	if !done {
36427		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
36428		return
36429	}
36430	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36431	if vcchdlr.Response.Response, err = future.GetResult(sender); err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
36432		vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
36433		if err != nil {
36434			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
36435		}
36436	}
36437	return
36438}
36439
36440// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
36441// results of a long-running operation.
36442type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
36443	azure.Future
36444}
36445
36446// Result returns the result of the asynchronous operation.
36447// If the operation has not completed it will return an error.
36448func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
36449	var done bool
36450	done, err = future.DoneWithContext(context.Background(), client)
36451	if err != nil {
36452		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
36453		return
36454	}
36455	if !done {
36456		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
36457		return
36458	}
36459	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36460	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
36461		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
36462		if err != nil {
36463			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
36464		}
36465	}
36466	return
36467}
36468
36469// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
36470// results of a long-running operation.
36471type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
36472	azure.Future
36473}
36474
36475// Result returns the result of the asynchronous operation.
36476// If the operation has not completed it will return an error.
36477func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
36478	var done bool
36479	done, err = future.DoneWithContext(context.Background(), client)
36480	if err != nil {
36481		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
36482		return
36483	}
36484	if !done {
36485		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
36486		return
36487	}
36488	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36489	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
36490		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
36491		if err != nil {
36492			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
36493		}
36494	}
36495	return
36496}
36497
36498// VirtualNetworkGatewaySku virtualNetworkGatewaySku details.
36499type VirtualNetworkGatewaySku struct {
36500	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw4', 'VirtualNetworkGatewaySkuNameVpnGw5', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameVpnGw4AZ', 'VirtualNetworkGatewaySkuNameVpnGw5AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
36501	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
36502	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw4', 'VirtualNetworkGatewaySkuTierVpnGw5', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierVpnGw4AZ', 'VirtualNetworkGatewaySkuTierVpnGw5AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
36503	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
36504	// Capacity - READ-ONLY; The capacity.
36505	Capacity *int32 `json:"capacity,omitempty"`
36506}
36507
36508// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
36509// long-running operation.
36510type VirtualNetworkGatewaysResetFuture struct {
36511	azure.Future
36512}
36513
36514// Result returns the result of the asynchronous operation.
36515// If the operation has not completed it will return an error.
36516func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
36517	var done bool
36518	done, err = future.DoneWithContext(context.Background(), client)
36519	if err != nil {
36520		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
36521		return
36522	}
36523	if !done {
36524		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
36525		return
36526	}
36527	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36528	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
36529		vng, err = client.ResetResponder(vng.Response.Response)
36530		if err != nil {
36531			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
36532		}
36533	}
36534	return
36535}
36536
36537// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
36538// results of a long-running operation.
36539type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
36540	azure.Future
36541}
36542
36543// Result returns the result of the asynchronous operation.
36544// If the operation has not completed it will return an error.
36545func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
36546	var done bool
36547	done, err = future.DoneWithContext(context.Background(), client)
36548	if err != nil {
36549		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
36550		return
36551	}
36552	if !done {
36553		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
36554		return
36555	}
36556	ar.Response = future.Response()
36557	return
36558}
36559
36560// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
36561// results of a long-running operation.
36562type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
36563	azure.Future
36564}
36565
36566// Result returns the result of the asynchronous operation.
36567// If the operation has not completed it will return an error.
36568func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
36569	var done bool
36570	done, err = future.DoneWithContext(context.Background(), client)
36571	if err != nil {
36572		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
36573		return
36574	}
36575	if !done {
36576		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
36577		return
36578	}
36579	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36580	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
36581		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
36582		if err != nil {
36583			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
36584		}
36585	}
36586	return
36587}
36588
36589// VirtualNetworkGatewaysStartPacketCaptureFuture an abstraction for monitoring and retrieving the results
36590// of a long-running operation.
36591type VirtualNetworkGatewaysStartPacketCaptureFuture struct {
36592	azure.Future
36593}
36594
36595// Result returns the result of the asynchronous operation.
36596// If the operation has not completed it will return an error.
36597func (future *VirtualNetworkGatewaysStartPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
36598	var done bool
36599	done, err = future.DoneWithContext(context.Background(), client)
36600	if err != nil {
36601		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
36602		return
36603	}
36604	if !done {
36605		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStartPacketCaptureFuture")
36606		return
36607	}
36608	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36609	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
36610		s, err = client.StartPacketCaptureResponder(s.Response.Response)
36611		if err != nil {
36612			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
36613		}
36614	}
36615	return
36616}
36617
36618// VirtualNetworkGatewaysStopPacketCaptureFuture an abstraction for monitoring and retrieving the results
36619// of a long-running operation.
36620type VirtualNetworkGatewaysStopPacketCaptureFuture struct {
36621	azure.Future
36622}
36623
36624// Result returns the result of the asynchronous operation.
36625// If the operation has not completed it will return an error.
36626func (future *VirtualNetworkGatewaysStopPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
36627	var done bool
36628	done, err = future.DoneWithContext(context.Background(), client)
36629	if err != nil {
36630		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
36631		return
36632	}
36633	if !done {
36634		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStopPacketCaptureFuture")
36635		return
36636	}
36637	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36638	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
36639		s, err = client.StopPacketCaptureResponder(s.Response.Response)
36640		if err != nil {
36641			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
36642		}
36643	}
36644	return
36645}
36646
36647// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
36648// long-running operation.
36649type VirtualNetworkGatewaysUpdateTagsFuture struct {
36650	azure.Future
36651}
36652
36653// Result returns the result of the asynchronous operation.
36654// If the operation has not completed it will return an error.
36655func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
36656	var done bool
36657	done, err = future.DoneWithContext(context.Background(), client)
36658	if err != nil {
36659		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
36660		return
36661	}
36662	if !done {
36663		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
36664		return
36665	}
36666	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
36667	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
36668		vng, err = client.UpdateTagsResponder(vng.Response.Response)
36669		if err != nil {
36670			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
36671		}
36672	}
36673	return
36674}
36675
36676// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
36677type VirtualNetworkListResult struct {
36678	autorest.Response `json:"-"`
36679	// Value - A list of VirtualNetwork resources in a resource group.
36680	Value *[]VirtualNetwork `json:"value,omitempty"`
36681	// NextLink - The URL to get the next set of results.
36682	NextLink *string `json:"nextLink,omitempty"`
36683}
36684
36685// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
36686type VirtualNetworkListResultIterator struct {
36687	i    int
36688	page VirtualNetworkListResultPage
36689}
36690
36691// NextWithContext advances to the next value.  If there was an error making
36692// the request the iterator does not advance and the error is returned.
36693func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
36694	if tracing.IsEnabled() {
36695		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
36696		defer func() {
36697			sc := -1
36698			if iter.Response().Response.Response != nil {
36699				sc = iter.Response().Response.Response.StatusCode
36700			}
36701			tracing.EndSpan(ctx, sc, err)
36702		}()
36703	}
36704	iter.i++
36705	if iter.i < len(iter.page.Values()) {
36706		return nil
36707	}
36708	err = iter.page.NextWithContext(ctx)
36709	if err != nil {
36710		iter.i--
36711		return err
36712	}
36713	iter.i = 0
36714	return nil
36715}
36716
36717// Next advances to the next value.  If there was an error making
36718// the request the iterator does not advance and the error is returned.
36719// Deprecated: Use NextWithContext() instead.
36720func (iter *VirtualNetworkListResultIterator) Next() error {
36721	return iter.NextWithContext(context.Background())
36722}
36723
36724// NotDone returns true if the enumeration should be started or is not yet complete.
36725func (iter VirtualNetworkListResultIterator) NotDone() bool {
36726	return iter.page.NotDone() && iter.i < len(iter.page.Values())
36727}
36728
36729// Response returns the raw server response from the last page request.
36730func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
36731	return iter.page.Response()
36732}
36733
36734// Value returns the current value or a zero-initialized value if the
36735// iterator has advanced beyond the end of the collection.
36736func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
36737	if !iter.page.NotDone() {
36738		return VirtualNetwork{}
36739	}
36740	return iter.page.Values()[iter.i]
36741}
36742
36743// Creates a new instance of the VirtualNetworkListResultIterator type.
36744func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
36745	return VirtualNetworkListResultIterator{page: page}
36746}
36747
36748// IsEmpty returns true if the ListResult contains no values.
36749func (vnlr VirtualNetworkListResult) IsEmpty() bool {
36750	return vnlr.Value == nil || len(*vnlr.Value) == 0
36751}
36752
36753// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
36754// It returns nil if no more results exist.
36755func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
36756	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
36757		return nil, nil
36758	}
36759	return autorest.Prepare((&http.Request{}).WithContext(ctx),
36760		autorest.AsJSON(),
36761		autorest.AsGet(),
36762		autorest.WithBaseURL(to.String(vnlr.NextLink)))
36763}
36764
36765// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
36766type VirtualNetworkListResultPage struct {
36767	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
36768	vnlr VirtualNetworkListResult
36769}
36770
36771// NextWithContext advances to the next page of values.  If there was an error making
36772// the request the page does not advance and the error is returned.
36773func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
36774	if tracing.IsEnabled() {
36775		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
36776		defer func() {
36777			sc := -1
36778			if page.Response().Response.Response != nil {
36779				sc = page.Response().Response.Response.StatusCode
36780			}
36781			tracing.EndSpan(ctx, sc, err)
36782		}()
36783	}
36784	next, err := page.fn(ctx, page.vnlr)
36785	if err != nil {
36786		return err
36787	}
36788	page.vnlr = next
36789	return nil
36790}
36791
36792// Next advances to the next page of values.  If there was an error making
36793// the request the page does not advance and the error is returned.
36794// Deprecated: Use NextWithContext() instead.
36795func (page *VirtualNetworkListResultPage) Next() error {
36796	return page.NextWithContext(context.Background())
36797}
36798
36799// NotDone returns true if the page enumeration should be started or is not yet complete.
36800func (page VirtualNetworkListResultPage) NotDone() bool {
36801	return !page.vnlr.IsEmpty()
36802}
36803
36804// Response returns the raw server response from the last page request.
36805func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
36806	return page.vnlr
36807}
36808
36809// Values returns the slice of values for the current page or nil if there are no values.
36810func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
36811	if page.vnlr.IsEmpty() {
36812		return nil
36813	}
36814	return *page.vnlr.Value
36815}
36816
36817// Creates a new instance of the VirtualNetworkListResultPage type.
36818func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
36819	return VirtualNetworkListResultPage{fn: getNextPage}
36820}
36821
36822// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
36823type VirtualNetworkListUsageResult struct {
36824	autorest.Response `json:"-"`
36825	// Value - READ-ONLY; VirtualNetwork usage stats.
36826	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
36827	// NextLink - The URL to get the next set of results.
36828	NextLink *string `json:"nextLink,omitempty"`
36829}
36830
36831// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
36832// values.
36833type VirtualNetworkListUsageResultIterator struct {
36834	i    int
36835	page VirtualNetworkListUsageResultPage
36836}
36837
36838// NextWithContext advances to the next value.  If there was an error making
36839// the request the iterator does not advance and the error is returned.
36840func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
36841	if tracing.IsEnabled() {
36842		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
36843		defer func() {
36844			sc := -1
36845			if iter.Response().Response.Response != nil {
36846				sc = iter.Response().Response.Response.StatusCode
36847			}
36848			tracing.EndSpan(ctx, sc, err)
36849		}()
36850	}
36851	iter.i++
36852	if iter.i < len(iter.page.Values()) {
36853		return nil
36854	}
36855	err = iter.page.NextWithContext(ctx)
36856	if err != nil {
36857		iter.i--
36858		return err
36859	}
36860	iter.i = 0
36861	return nil
36862}
36863
36864// Next advances to the next value.  If there was an error making
36865// the request the iterator does not advance and the error is returned.
36866// Deprecated: Use NextWithContext() instead.
36867func (iter *VirtualNetworkListUsageResultIterator) Next() error {
36868	return iter.NextWithContext(context.Background())
36869}
36870
36871// NotDone returns true if the enumeration should be started or is not yet complete.
36872func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
36873	return iter.page.NotDone() && iter.i < len(iter.page.Values())
36874}
36875
36876// Response returns the raw server response from the last page request.
36877func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
36878	return iter.page.Response()
36879}
36880
36881// Value returns the current value or a zero-initialized value if the
36882// iterator has advanced beyond the end of the collection.
36883func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
36884	if !iter.page.NotDone() {
36885		return VirtualNetworkUsage{}
36886	}
36887	return iter.page.Values()[iter.i]
36888}
36889
36890// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
36891func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
36892	return VirtualNetworkListUsageResultIterator{page: page}
36893}
36894
36895// IsEmpty returns true if the ListResult contains no values.
36896func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
36897	return vnlur.Value == nil || len(*vnlur.Value) == 0
36898}
36899
36900// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
36901// It returns nil if no more results exist.
36902func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
36903	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
36904		return nil, nil
36905	}
36906	return autorest.Prepare((&http.Request{}).WithContext(ctx),
36907		autorest.AsJSON(),
36908		autorest.AsGet(),
36909		autorest.WithBaseURL(to.String(vnlur.NextLink)))
36910}
36911
36912// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
36913type VirtualNetworkListUsageResultPage struct {
36914	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
36915	vnlur VirtualNetworkListUsageResult
36916}
36917
36918// NextWithContext advances to the next page of values.  If there was an error making
36919// the request the page does not advance and the error is returned.
36920func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
36921	if tracing.IsEnabled() {
36922		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
36923		defer func() {
36924			sc := -1
36925			if page.Response().Response.Response != nil {
36926				sc = page.Response().Response.Response.StatusCode
36927			}
36928			tracing.EndSpan(ctx, sc, err)
36929		}()
36930	}
36931	next, err := page.fn(ctx, page.vnlur)
36932	if err != nil {
36933		return err
36934	}
36935	page.vnlur = next
36936	return nil
36937}
36938
36939// Next advances to the next page of values.  If there was an error making
36940// the request the page does not advance and the error is returned.
36941// Deprecated: Use NextWithContext() instead.
36942func (page *VirtualNetworkListUsageResultPage) Next() error {
36943	return page.NextWithContext(context.Background())
36944}
36945
36946// NotDone returns true if the page enumeration should be started or is not yet complete.
36947func (page VirtualNetworkListUsageResultPage) NotDone() bool {
36948	return !page.vnlur.IsEmpty()
36949}
36950
36951// Response returns the raw server response from the last page request.
36952func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
36953	return page.vnlur
36954}
36955
36956// Values returns the slice of values for the current page or nil if there are no values.
36957func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
36958	if page.vnlur.IsEmpty() {
36959		return nil
36960	}
36961	return *page.vnlur.Value
36962}
36963
36964// Creates a new instance of the VirtualNetworkListUsageResultPage type.
36965func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
36966	return VirtualNetworkListUsageResultPage{fn: getNextPage}
36967}
36968
36969// VirtualNetworkPeering peerings in a virtual network resource.
36970type VirtualNetworkPeering struct {
36971	autorest.Response `json:"-"`
36972	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
36973	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
36974	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
36975	Name *string `json:"name,omitempty"`
36976	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
36977	Etag *string `json:"etag,omitempty"`
36978	// ID - Resource ID.
36979	ID *string `json:"id,omitempty"`
36980}
36981
36982// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
36983func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
36984	objectMap := make(map[string]interface{})
36985	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
36986		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
36987	}
36988	if vnp.Name != nil {
36989		objectMap["name"] = vnp.Name
36990	}
36991	if vnp.ID != nil {
36992		objectMap["id"] = vnp.ID
36993	}
36994	return json.Marshal(objectMap)
36995}
36996
36997// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
36998func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
36999	var m map[string]*json.RawMessage
37000	err := json.Unmarshal(body, &m)
37001	if err != nil {
37002		return err
37003	}
37004	for k, v := range m {
37005		switch k {
37006		case "properties":
37007			if v != nil {
37008				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
37009				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
37010				if err != nil {
37011					return err
37012				}
37013				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
37014			}
37015		case "name":
37016			if v != nil {
37017				var name string
37018				err = json.Unmarshal(*v, &name)
37019				if err != nil {
37020					return err
37021				}
37022				vnp.Name = &name
37023			}
37024		case "etag":
37025			if v != nil {
37026				var etag string
37027				err = json.Unmarshal(*v, &etag)
37028				if err != nil {
37029					return err
37030				}
37031				vnp.Etag = &etag
37032			}
37033		case "id":
37034			if v != nil {
37035				var ID string
37036				err = json.Unmarshal(*v, &ID)
37037				if err != nil {
37038					return err
37039				}
37040				vnp.ID = &ID
37041			}
37042		}
37043	}
37044
37045	return nil
37046}
37047
37048// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
37049// belong to a virtual network.
37050type VirtualNetworkPeeringListResult struct {
37051	autorest.Response `json:"-"`
37052	// Value - The peerings in a virtual network.
37053	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
37054	// NextLink - The URL to get the next set of results.
37055	NextLink *string `json:"nextLink,omitempty"`
37056}
37057
37058// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
37059// values.
37060type VirtualNetworkPeeringListResultIterator struct {
37061	i    int
37062	page VirtualNetworkPeeringListResultPage
37063}
37064
37065// NextWithContext advances to the next value.  If there was an error making
37066// the request the iterator does not advance and the error is returned.
37067func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
37068	if tracing.IsEnabled() {
37069		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
37070		defer func() {
37071			sc := -1
37072			if iter.Response().Response.Response != nil {
37073				sc = iter.Response().Response.Response.StatusCode
37074			}
37075			tracing.EndSpan(ctx, sc, err)
37076		}()
37077	}
37078	iter.i++
37079	if iter.i < len(iter.page.Values()) {
37080		return nil
37081	}
37082	err = iter.page.NextWithContext(ctx)
37083	if err != nil {
37084		iter.i--
37085		return err
37086	}
37087	iter.i = 0
37088	return nil
37089}
37090
37091// Next advances to the next value.  If there was an error making
37092// the request the iterator does not advance and the error is returned.
37093// Deprecated: Use NextWithContext() instead.
37094func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
37095	return iter.NextWithContext(context.Background())
37096}
37097
37098// NotDone returns true if the enumeration should be started or is not yet complete.
37099func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
37100	return iter.page.NotDone() && iter.i < len(iter.page.Values())
37101}
37102
37103// Response returns the raw server response from the last page request.
37104func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
37105	return iter.page.Response()
37106}
37107
37108// Value returns the current value or a zero-initialized value if the
37109// iterator has advanced beyond the end of the collection.
37110func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
37111	if !iter.page.NotDone() {
37112		return VirtualNetworkPeering{}
37113	}
37114	return iter.page.Values()[iter.i]
37115}
37116
37117// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
37118func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
37119	return VirtualNetworkPeeringListResultIterator{page: page}
37120}
37121
37122// IsEmpty returns true if the ListResult contains no values.
37123func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
37124	return vnplr.Value == nil || len(*vnplr.Value) == 0
37125}
37126
37127// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
37128// It returns nil if no more results exist.
37129func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
37130	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
37131		return nil, nil
37132	}
37133	return autorest.Prepare((&http.Request{}).WithContext(ctx),
37134		autorest.AsJSON(),
37135		autorest.AsGet(),
37136		autorest.WithBaseURL(to.String(vnplr.NextLink)))
37137}
37138
37139// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
37140type VirtualNetworkPeeringListResultPage struct {
37141	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
37142	vnplr VirtualNetworkPeeringListResult
37143}
37144
37145// NextWithContext advances to the next page of values.  If there was an error making
37146// the request the page does not advance and the error is returned.
37147func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
37148	if tracing.IsEnabled() {
37149		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
37150		defer func() {
37151			sc := -1
37152			if page.Response().Response.Response != nil {
37153				sc = page.Response().Response.Response.StatusCode
37154			}
37155			tracing.EndSpan(ctx, sc, err)
37156		}()
37157	}
37158	next, err := page.fn(ctx, page.vnplr)
37159	if err != nil {
37160		return err
37161	}
37162	page.vnplr = next
37163	return nil
37164}
37165
37166// Next advances to the next page of values.  If there was an error making
37167// the request the page does not advance and the error is returned.
37168// Deprecated: Use NextWithContext() instead.
37169func (page *VirtualNetworkPeeringListResultPage) Next() error {
37170	return page.NextWithContext(context.Background())
37171}
37172
37173// NotDone returns true if the page enumeration should be started or is not yet complete.
37174func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
37175	return !page.vnplr.IsEmpty()
37176}
37177
37178// Response returns the raw server response from the last page request.
37179func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
37180	return page.vnplr
37181}
37182
37183// Values returns the slice of values for the current page or nil if there are no values.
37184func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
37185	if page.vnplr.IsEmpty() {
37186		return nil
37187	}
37188	return *page.vnplr.Value
37189}
37190
37191// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
37192func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
37193	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
37194}
37195
37196// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
37197type VirtualNetworkPeeringPropertiesFormat struct {
37198	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
37199	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
37200	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
37201	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
37202	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
37203	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
37204	// UseRemoteGateways - If remote gateways can be used on this virtual network. If the flag is set to true, and allowGatewayTransit on remote peering is also true, virtual network will use gateways of remote virtual network for transit. Only one peering can have this flag set to true. This flag cannot be set if virtual network already has a gateway.
37205	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
37206	// RemoteVirtualNetwork - The reference to the remote virtual network. The remote virtual network can be in the same or different region (preview). See here to register for the preview and learn more (https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering).
37207	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
37208	// RemoteAddressSpace - The reference to the remote virtual network address space.
37209	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
37210	// PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
37211	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
37212	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
37213	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
37214}
37215
37216// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
37217// long-running operation.
37218type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
37219	azure.Future
37220}
37221
37222// Result returns the result of the asynchronous operation.
37223// If the operation has not completed it will return an error.
37224func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
37225	var done bool
37226	done, err = future.DoneWithContext(context.Background(), client)
37227	if err != nil {
37228		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
37229		return
37230	}
37231	if !done {
37232		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
37233		return
37234	}
37235	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
37236	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
37237		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
37238		if err != nil {
37239			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
37240		}
37241	}
37242	return
37243}
37244
37245// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
37246// long-running operation.
37247type VirtualNetworkPeeringsDeleteFuture struct {
37248	azure.Future
37249}
37250
37251// Result returns the result of the asynchronous operation.
37252// If the operation has not completed it will return an error.
37253func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
37254	var done bool
37255	done, err = future.DoneWithContext(context.Background(), client)
37256	if err != nil {
37257		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
37258		return
37259	}
37260	if !done {
37261		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
37262		return
37263	}
37264	ar.Response = future.Response()
37265	return
37266}
37267
37268// VirtualNetworkPropertiesFormat properties of the virtual network.
37269type VirtualNetworkPropertiesFormat struct {
37270	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
37271	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
37272	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
37273	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
37274	// Subnets - A list of subnets in a Virtual Network.
37275	Subnets *[]Subnet `json:"subnets,omitempty"`
37276	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
37277	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
37278	// ResourceGUID - READ-ONLY; The resourceGuid property of the Virtual Network resource.
37279	ResourceGUID *string `json:"resourceGuid,omitempty"`
37280	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
37281	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
37282	// EnableDdosProtection - Indicates if DDoS protection is enabled for all the protected resources in the virtual network. It requires a DDoS protection plan associated with the resource.
37283	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
37284	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
37285	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
37286	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
37287	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
37288	// BgpCommunities - Bgp Communities sent over ExpressRoute with each route corresponding to a prefix in this VNET.
37289	BgpCommunities *VirtualNetworkBgpCommunities `json:"bgpCommunities,omitempty"`
37290	// IPAllocations - Array of IpAllocation which reference this VNET.
37291	IPAllocations *[]SubResource `json:"ipAllocations,omitempty"`
37292}
37293
37294// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
37295// long-running operation.
37296type VirtualNetworksCreateOrUpdateFuture struct {
37297	azure.Future
37298}
37299
37300// Result returns the result of the asynchronous operation.
37301// If the operation has not completed it will return an error.
37302func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
37303	var done bool
37304	done, err = future.DoneWithContext(context.Background(), client)
37305	if err != nil {
37306		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
37307		return
37308	}
37309	if !done {
37310		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
37311		return
37312	}
37313	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
37314	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
37315		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
37316		if err != nil {
37317			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
37318		}
37319	}
37320	return
37321}
37322
37323// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
37324// operation.
37325type VirtualNetworksDeleteFuture struct {
37326	azure.Future
37327}
37328
37329// Result returns the result of the asynchronous operation.
37330// If the operation has not completed it will return an error.
37331func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
37332	var done bool
37333	done, err = future.DoneWithContext(context.Background(), client)
37334	if err != nil {
37335		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
37336		return
37337	}
37338	if !done {
37339		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
37340		return
37341	}
37342	ar.Response = future.Response()
37343	return
37344}
37345
37346// VirtualNetworkTap virtual Network Tap resource.
37347type VirtualNetworkTap struct {
37348	autorest.Response `json:"-"`
37349	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
37350	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
37351	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
37352	Etag *string `json:"etag,omitempty"`
37353	// ID - Resource ID.
37354	ID *string `json:"id,omitempty"`
37355	// Name - READ-ONLY; Resource name.
37356	Name *string `json:"name,omitempty"`
37357	// Type - READ-ONLY; Resource type.
37358	Type *string `json:"type,omitempty"`
37359	// Location - Resource location.
37360	Location *string `json:"location,omitempty"`
37361	// Tags - Resource tags.
37362	Tags map[string]*string `json:"tags"`
37363}
37364
37365// MarshalJSON is the custom marshaler for VirtualNetworkTap.
37366func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
37367	objectMap := make(map[string]interface{})
37368	if vnt.VirtualNetworkTapPropertiesFormat != nil {
37369		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
37370	}
37371	if vnt.ID != nil {
37372		objectMap["id"] = vnt.ID
37373	}
37374	if vnt.Location != nil {
37375		objectMap["location"] = vnt.Location
37376	}
37377	if vnt.Tags != nil {
37378		objectMap["tags"] = vnt.Tags
37379	}
37380	return json.Marshal(objectMap)
37381}
37382
37383// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
37384func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
37385	var m map[string]*json.RawMessage
37386	err := json.Unmarshal(body, &m)
37387	if err != nil {
37388		return err
37389	}
37390	for k, v := range m {
37391		switch k {
37392		case "properties":
37393			if v != nil {
37394				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
37395				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
37396				if err != nil {
37397					return err
37398				}
37399				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
37400			}
37401		case "etag":
37402			if v != nil {
37403				var etag string
37404				err = json.Unmarshal(*v, &etag)
37405				if err != nil {
37406					return err
37407				}
37408				vnt.Etag = &etag
37409			}
37410		case "id":
37411			if v != nil {
37412				var ID string
37413				err = json.Unmarshal(*v, &ID)
37414				if err != nil {
37415					return err
37416				}
37417				vnt.ID = &ID
37418			}
37419		case "name":
37420			if v != nil {
37421				var name string
37422				err = json.Unmarshal(*v, &name)
37423				if err != nil {
37424					return err
37425				}
37426				vnt.Name = &name
37427			}
37428		case "type":
37429			if v != nil {
37430				var typeVar string
37431				err = json.Unmarshal(*v, &typeVar)
37432				if err != nil {
37433					return err
37434				}
37435				vnt.Type = &typeVar
37436			}
37437		case "location":
37438			if v != nil {
37439				var location string
37440				err = json.Unmarshal(*v, &location)
37441				if err != nil {
37442					return err
37443				}
37444				vnt.Location = &location
37445			}
37446		case "tags":
37447			if v != nil {
37448				var tags map[string]*string
37449				err = json.Unmarshal(*v, &tags)
37450				if err != nil {
37451					return err
37452				}
37453				vnt.Tags = tags
37454			}
37455		}
37456	}
37457
37458	return nil
37459}
37460
37461// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
37462type VirtualNetworkTapListResult struct {
37463	autorest.Response `json:"-"`
37464	// Value - A list of VirtualNetworkTaps in a resource group.
37465	Value *[]VirtualNetworkTap `json:"value,omitempty"`
37466	// NextLink - The URL to get the next set of results.
37467	NextLink *string `json:"nextLink,omitempty"`
37468}
37469
37470// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
37471type VirtualNetworkTapListResultIterator struct {
37472	i    int
37473	page VirtualNetworkTapListResultPage
37474}
37475
37476// NextWithContext advances to the next value.  If there was an error making
37477// the request the iterator does not advance and the error is returned.
37478func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
37479	if tracing.IsEnabled() {
37480		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
37481		defer func() {
37482			sc := -1
37483			if iter.Response().Response.Response != nil {
37484				sc = iter.Response().Response.Response.StatusCode
37485			}
37486			tracing.EndSpan(ctx, sc, err)
37487		}()
37488	}
37489	iter.i++
37490	if iter.i < len(iter.page.Values()) {
37491		return nil
37492	}
37493	err = iter.page.NextWithContext(ctx)
37494	if err != nil {
37495		iter.i--
37496		return err
37497	}
37498	iter.i = 0
37499	return nil
37500}
37501
37502// Next advances to the next value.  If there was an error making
37503// the request the iterator does not advance and the error is returned.
37504// Deprecated: Use NextWithContext() instead.
37505func (iter *VirtualNetworkTapListResultIterator) Next() error {
37506	return iter.NextWithContext(context.Background())
37507}
37508
37509// NotDone returns true if the enumeration should be started or is not yet complete.
37510func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
37511	return iter.page.NotDone() && iter.i < len(iter.page.Values())
37512}
37513
37514// Response returns the raw server response from the last page request.
37515func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
37516	return iter.page.Response()
37517}
37518
37519// Value returns the current value or a zero-initialized value if the
37520// iterator has advanced beyond the end of the collection.
37521func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
37522	if !iter.page.NotDone() {
37523		return VirtualNetworkTap{}
37524	}
37525	return iter.page.Values()[iter.i]
37526}
37527
37528// Creates a new instance of the VirtualNetworkTapListResultIterator type.
37529func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
37530	return VirtualNetworkTapListResultIterator{page: page}
37531}
37532
37533// IsEmpty returns true if the ListResult contains no values.
37534func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
37535	return vntlr.Value == nil || len(*vntlr.Value) == 0
37536}
37537
37538// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
37539// It returns nil if no more results exist.
37540func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
37541	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
37542		return nil, nil
37543	}
37544	return autorest.Prepare((&http.Request{}).WithContext(ctx),
37545		autorest.AsJSON(),
37546		autorest.AsGet(),
37547		autorest.WithBaseURL(to.String(vntlr.NextLink)))
37548}
37549
37550// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
37551type VirtualNetworkTapListResultPage struct {
37552	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
37553	vntlr VirtualNetworkTapListResult
37554}
37555
37556// NextWithContext advances to the next page of values.  If there was an error making
37557// the request the page does not advance and the error is returned.
37558func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
37559	if tracing.IsEnabled() {
37560		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
37561		defer func() {
37562			sc := -1
37563			if page.Response().Response.Response != nil {
37564				sc = page.Response().Response.Response.StatusCode
37565			}
37566			tracing.EndSpan(ctx, sc, err)
37567		}()
37568	}
37569	next, err := page.fn(ctx, page.vntlr)
37570	if err != nil {
37571		return err
37572	}
37573	page.vntlr = next
37574	return nil
37575}
37576
37577// Next advances to the next page of values.  If there was an error making
37578// the request the page does not advance and the error is returned.
37579// Deprecated: Use NextWithContext() instead.
37580func (page *VirtualNetworkTapListResultPage) Next() error {
37581	return page.NextWithContext(context.Background())
37582}
37583
37584// NotDone returns true if the page enumeration should be started or is not yet complete.
37585func (page VirtualNetworkTapListResultPage) NotDone() bool {
37586	return !page.vntlr.IsEmpty()
37587}
37588
37589// Response returns the raw server response from the last page request.
37590func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
37591	return page.vntlr
37592}
37593
37594// Values returns the slice of values for the current page or nil if there are no values.
37595func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
37596	if page.vntlr.IsEmpty() {
37597		return nil
37598	}
37599	return *page.vntlr.Value
37600}
37601
37602// Creates a new instance of the VirtualNetworkTapListResultPage type.
37603func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
37604	return VirtualNetworkTapListResultPage{fn: getNextPage}
37605}
37606
37607// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
37608type VirtualNetworkTapPropertiesFormat struct {
37609	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
37610	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
37611	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network tap resource.
37612	ResourceGUID *string `json:"resourceGuid,omitempty"`
37613	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
37614	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
37615	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap.
37616	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
37617	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap.
37618	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
37619	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
37620	DestinationPort *int32 `json:"destinationPort,omitempty"`
37621}
37622
37623// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
37624// long-running operation.
37625type VirtualNetworkTapsCreateOrUpdateFuture struct {
37626	azure.Future
37627}
37628
37629// Result returns the result of the asynchronous operation.
37630// If the operation has not completed it will return an error.
37631func (future *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
37632	var done bool
37633	done, err = future.DoneWithContext(context.Background(), client)
37634	if err != nil {
37635		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
37636		return
37637	}
37638	if !done {
37639		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
37640		return
37641	}
37642	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
37643	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
37644		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
37645		if err != nil {
37646			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
37647		}
37648	}
37649	return
37650}
37651
37652// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
37653// long-running operation.
37654type VirtualNetworkTapsDeleteFuture struct {
37655	azure.Future
37656}
37657
37658// Result returns the result of the asynchronous operation.
37659// If the operation has not completed it will return an error.
37660func (future *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
37661	var done bool
37662	done, err = future.DoneWithContext(context.Background(), client)
37663	if err != nil {
37664		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
37665		return
37666	}
37667	if !done {
37668		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
37669		return
37670	}
37671	ar.Response = future.Response()
37672	return
37673}
37674
37675// VirtualNetworkUsage usage details for subnet.
37676type VirtualNetworkUsage struct {
37677	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
37678	CurrentValue *float64 `json:"currentValue,omitempty"`
37679	// ID - READ-ONLY; Subnet identifier.
37680	ID *string `json:"id,omitempty"`
37681	// Limit - READ-ONLY; Indicates the size of the subnet.
37682	Limit *float64 `json:"limit,omitempty"`
37683	// Name - READ-ONLY; The name containing common and localized value for usage.
37684	Name *VirtualNetworkUsageName `json:"name,omitempty"`
37685	// Unit - READ-ONLY; Usage units. Returns 'Count'.
37686	Unit *string `json:"unit,omitempty"`
37687}
37688
37689// VirtualNetworkUsageName usage strings container.
37690type VirtualNetworkUsageName struct {
37691	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
37692	LocalizedValue *string `json:"localizedValue,omitempty"`
37693	// Value - READ-ONLY; Subnet size and usage string.
37694	Value *string `json:"value,omitempty"`
37695}
37696
37697// VirtualRouter virtualRouter Resource.
37698type VirtualRouter struct {
37699	autorest.Response `json:"-"`
37700	// VirtualRouterPropertiesFormat - Properties of the Virtual Router.
37701	*VirtualRouterPropertiesFormat `json:"properties,omitempty"`
37702	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
37703	Etag *string `json:"etag,omitempty"`
37704	// ID - Resource ID.
37705	ID *string `json:"id,omitempty"`
37706	// Name - READ-ONLY; Resource name.
37707	Name *string `json:"name,omitempty"`
37708	// Type - READ-ONLY; Resource type.
37709	Type *string `json:"type,omitempty"`
37710	// Location - Resource location.
37711	Location *string `json:"location,omitempty"`
37712	// Tags - Resource tags.
37713	Tags map[string]*string `json:"tags"`
37714}
37715
37716// MarshalJSON is the custom marshaler for VirtualRouter.
37717func (vr VirtualRouter) MarshalJSON() ([]byte, error) {
37718	objectMap := make(map[string]interface{})
37719	if vr.VirtualRouterPropertiesFormat != nil {
37720		objectMap["properties"] = vr.VirtualRouterPropertiesFormat
37721	}
37722	if vr.ID != nil {
37723		objectMap["id"] = vr.ID
37724	}
37725	if vr.Location != nil {
37726		objectMap["location"] = vr.Location
37727	}
37728	if vr.Tags != nil {
37729		objectMap["tags"] = vr.Tags
37730	}
37731	return json.Marshal(objectMap)
37732}
37733
37734// UnmarshalJSON is the custom unmarshaler for VirtualRouter struct.
37735func (vr *VirtualRouter) UnmarshalJSON(body []byte) error {
37736	var m map[string]*json.RawMessage
37737	err := json.Unmarshal(body, &m)
37738	if err != nil {
37739		return err
37740	}
37741	for k, v := range m {
37742		switch k {
37743		case "properties":
37744			if v != nil {
37745				var virtualRouterPropertiesFormat VirtualRouterPropertiesFormat
37746				err = json.Unmarshal(*v, &virtualRouterPropertiesFormat)
37747				if err != nil {
37748					return err
37749				}
37750				vr.VirtualRouterPropertiesFormat = &virtualRouterPropertiesFormat
37751			}
37752		case "etag":
37753			if v != nil {
37754				var etag string
37755				err = json.Unmarshal(*v, &etag)
37756				if err != nil {
37757					return err
37758				}
37759				vr.Etag = &etag
37760			}
37761		case "id":
37762			if v != nil {
37763				var ID string
37764				err = json.Unmarshal(*v, &ID)
37765				if err != nil {
37766					return err
37767				}
37768				vr.ID = &ID
37769			}
37770		case "name":
37771			if v != nil {
37772				var name string
37773				err = json.Unmarshal(*v, &name)
37774				if err != nil {
37775					return err
37776				}
37777				vr.Name = &name
37778			}
37779		case "type":
37780			if v != nil {
37781				var typeVar string
37782				err = json.Unmarshal(*v, &typeVar)
37783				if err != nil {
37784					return err
37785				}
37786				vr.Type = &typeVar
37787			}
37788		case "location":
37789			if v != nil {
37790				var location string
37791				err = json.Unmarshal(*v, &location)
37792				if err != nil {
37793					return err
37794				}
37795				vr.Location = &location
37796			}
37797		case "tags":
37798			if v != nil {
37799				var tags map[string]*string
37800				err = json.Unmarshal(*v, &tags)
37801				if err != nil {
37802					return err
37803				}
37804				vr.Tags = tags
37805			}
37806		}
37807	}
37808
37809	return nil
37810}
37811
37812// VirtualRouterListResult response for ListVirtualRouters API service call.
37813type VirtualRouterListResult struct {
37814	autorest.Response `json:"-"`
37815	// Value - List of Virtual Routers.
37816	Value *[]VirtualRouter `json:"value,omitempty"`
37817	// NextLink - URL to get the next set of results.
37818	NextLink *string `json:"nextLink,omitempty"`
37819}
37820
37821// VirtualRouterListResultIterator provides access to a complete listing of VirtualRouter values.
37822type VirtualRouterListResultIterator struct {
37823	i    int
37824	page VirtualRouterListResultPage
37825}
37826
37827// NextWithContext advances to the next value.  If there was an error making
37828// the request the iterator does not advance and the error is returned.
37829func (iter *VirtualRouterListResultIterator) NextWithContext(ctx context.Context) (err error) {
37830	if tracing.IsEnabled() {
37831		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultIterator.NextWithContext")
37832		defer func() {
37833			sc := -1
37834			if iter.Response().Response.Response != nil {
37835				sc = iter.Response().Response.Response.StatusCode
37836			}
37837			tracing.EndSpan(ctx, sc, err)
37838		}()
37839	}
37840	iter.i++
37841	if iter.i < len(iter.page.Values()) {
37842		return nil
37843	}
37844	err = iter.page.NextWithContext(ctx)
37845	if err != nil {
37846		iter.i--
37847		return err
37848	}
37849	iter.i = 0
37850	return nil
37851}
37852
37853// Next advances to the next value.  If there was an error making
37854// the request the iterator does not advance and the error is returned.
37855// Deprecated: Use NextWithContext() instead.
37856func (iter *VirtualRouterListResultIterator) Next() error {
37857	return iter.NextWithContext(context.Background())
37858}
37859
37860// NotDone returns true if the enumeration should be started or is not yet complete.
37861func (iter VirtualRouterListResultIterator) NotDone() bool {
37862	return iter.page.NotDone() && iter.i < len(iter.page.Values())
37863}
37864
37865// Response returns the raw server response from the last page request.
37866func (iter VirtualRouterListResultIterator) Response() VirtualRouterListResult {
37867	return iter.page.Response()
37868}
37869
37870// Value returns the current value or a zero-initialized value if the
37871// iterator has advanced beyond the end of the collection.
37872func (iter VirtualRouterListResultIterator) Value() VirtualRouter {
37873	if !iter.page.NotDone() {
37874		return VirtualRouter{}
37875	}
37876	return iter.page.Values()[iter.i]
37877}
37878
37879// Creates a new instance of the VirtualRouterListResultIterator type.
37880func NewVirtualRouterListResultIterator(page VirtualRouterListResultPage) VirtualRouterListResultIterator {
37881	return VirtualRouterListResultIterator{page: page}
37882}
37883
37884// IsEmpty returns true if the ListResult contains no values.
37885func (vrlr VirtualRouterListResult) IsEmpty() bool {
37886	return vrlr.Value == nil || len(*vrlr.Value) == 0
37887}
37888
37889// virtualRouterListResultPreparer prepares a request to retrieve the next set of results.
37890// It returns nil if no more results exist.
37891func (vrlr VirtualRouterListResult) virtualRouterListResultPreparer(ctx context.Context) (*http.Request, error) {
37892	if vrlr.NextLink == nil || len(to.String(vrlr.NextLink)) < 1 {
37893		return nil, nil
37894	}
37895	return autorest.Prepare((&http.Request{}).WithContext(ctx),
37896		autorest.AsJSON(),
37897		autorest.AsGet(),
37898		autorest.WithBaseURL(to.String(vrlr.NextLink)))
37899}
37900
37901// VirtualRouterListResultPage contains a page of VirtualRouter values.
37902type VirtualRouterListResultPage struct {
37903	fn   func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)
37904	vrlr VirtualRouterListResult
37905}
37906
37907// NextWithContext advances to the next page of values.  If there was an error making
37908// the request the page does not advance and the error is returned.
37909func (page *VirtualRouterListResultPage) NextWithContext(ctx context.Context) (err error) {
37910	if tracing.IsEnabled() {
37911		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultPage.NextWithContext")
37912		defer func() {
37913			sc := -1
37914			if page.Response().Response.Response != nil {
37915				sc = page.Response().Response.Response.StatusCode
37916			}
37917			tracing.EndSpan(ctx, sc, err)
37918		}()
37919	}
37920	next, err := page.fn(ctx, page.vrlr)
37921	if err != nil {
37922		return err
37923	}
37924	page.vrlr = next
37925	return nil
37926}
37927
37928// Next advances to the next page of values.  If there was an error making
37929// the request the page does not advance and the error is returned.
37930// Deprecated: Use NextWithContext() instead.
37931func (page *VirtualRouterListResultPage) Next() error {
37932	return page.NextWithContext(context.Background())
37933}
37934
37935// NotDone returns true if the page enumeration should be started or is not yet complete.
37936func (page VirtualRouterListResultPage) NotDone() bool {
37937	return !page.vrlr.IsEmpty()
37938}
37939
37940// Response returns the raw server response from the last page request.
37941func (page VirtualRouterListResultPage) Response() VirtualRouterListResult {
37942	return page.vrlr
37943}
37944
37945// Values returns the slice of values for the current page or nil if there are no values.
37946func (page VirtualRouterListResultPage) Values() []VirtualRouter {
37947	if page.vrlr.IsEmpty() {
37948		return nil
37949	}
37950	return *page.vrlr.Value
37951}
37952
37953// Creates a new instance of the VirtualRouterListResultPage type.
37954func NewVirtualRouterListResultPage(getNextPage func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)) VirtualRouterListResultPage {
37955	return VirtualRouterListResultPage{fn: getNextPage}
37956}
37957
37958// VirtualRouterPeering virtual Router Peering resource.
37959type VirtualRouterPeering struct {
37960	autorest.Response `json:"-"`
37961	// VirtualRouterPeeringProperties - The properties of the Virtual Router Peering.
37962	*VirtualRouterPeeringProperties `json:"properties,omitempty"`
37963	// Name - Name of the virtual router peering that is unique within a virtual router.
37964	Name *string `json:"name,omitempty"`
37965	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
37966	Etag *string `json:"etag,omitempty"`
37967	// Type - READ-ONLY; Peering type.
37968	Type *string `json:"type,omitempty"`
37969	// ID - Resource ID.
37970	ID *string `json:"id,omitempty"`
37971}
37972
37973// MarshalJSON is the custom marshaler for VirtualRouterPeering.
37974func (vrp VirtualRouterPeering) MarshalJSON() ([]byte, error) {
37975	objectMap := make(map[string]interface{})
37976	if vrp.VirtualRouterPeeringProperties != nil {
37977		objectMap["properties"] = vrp.VirtualRouterPeeringProperties
37978	}
37979	if vrp.Name != nil {
37980		objectMap["name"] = vrp.Name
37981	}
37982	if vrp.ID != nil {
37983		objectMap["id"] = vrp.ID
37984	}
37985	return json.Marshal(objectMap)
37986}
37987
37988// UnmarshalJSON is the custom unmarshaler for VirtualRouterPeering struct.
37989func (vrp *VirtualRouterPeering) UnmarshalJSON(body []byte) error {
37990	var m map[string]*json.RawMessage
37991	err := json.Unmarshal(body, &m)
37992	if err != nil {
37993		return err
37994	}
37995	for k, v := range m {
37996		switch k {
37997		case "properties":
37998			if v != nil {
37999				var virtualRouterPeeringProperties VirtualRouterPeeringProperties
38000				err = json.Unmarshal(*v, &virtualRouterPeeringProperties)
38001				if err != nil {
38002					return err
38003				}
38004				vrp.VirtualRouterPeeringProperties = &virtualRouterPeeringProperties
38005			}
38006		case "name":
38007			if v != nil {
38008				var name string
38009				err = json.Unmarshal(*v, &name)
38010				if err != nil {
38011					return err
38012				}
38013				vrp.Name = &name
38014			}
38015		case "etag":
38016			if v != nil {
38017				var etag string
38018				err = json.Unmarshal(*v, &etag)
38019				if err != nil {
38020					return err
38021				}
38022				vrp.Etag = &etag
38023			}
38024		case "type":
38025			if v != nil {
38026				var typeVar string
38027				err = json.Unmarshal(*v, &typeVar)
38028				if err != nil {
38029					return err
38030				}
38031				vrp.Type = &typeVar
38032			}
38033		case "id":
38034			if v != nil {
38035				var ID string
38036				err = json.Unmarshal(*v, &ID)
38037				if err != nil {
38038					return err
38039				}
38040				vrp.ID = &ID
38041			}
38042		}
38043	}
38044
38045	return nil
38046}
38047
38048// VirtualRouterPeeringListResult response for ListVirtualRouterPeerings API service call.
38049type VirtualRouterPeeringListResult struct {
38050	autorest.Response `json:"-"`
38051	// Value - List of VirtualRouterPeerings in a VirtualRouter.
38052	Value *[]VirtualRouterPeering `json:"value,omitempty"`
38053	// NextLink - URL to get the next set of results.
38054	NextLink *string `json:"nextLink,omitempty"`
38055}
38056
38057// VirtualRouterPeeringListResultIterator provides access to a complete listing of VirtualRouterPeering
38058// values.
38059type VirtualRouterPeeringListResultIterator struct {
38060	i    int
38061	page VirtualRouterPeeringListResultPage
38062}
38063
38064// NextWithContext advances to the next value.  If there was an error making
38065// the request the iterator does not advance and the error is returned.
38066func (iter *VirtualRouterPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
38067	if tracing.IsEnabled() {
38068		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultIterator.NextWithContext")
38069		defer func() {
38070			sc := -1
38071			if iter.Response().Response.Response != nil {
38072				sc = iter.Response().Response.Response.StatusCode
38073			}
38074			tracing.EndSpan(ctx, sc, err)
38075		}()
38076	}
38077	iter.i++
38078	if iter.i < len(iter.page.Values()) {
38079		return nil
38080	}
38081	err = iter.page.NextWithContext(ctx)
38082	if err != nil {
38083		iter.i--
38084		return err
38085	}
38086	iter.i = 0
38087	return nil
38088}
38089
38090// Next advances to the next value.  If there was an error making
38091// the request the iterator does not advance and the error is returned.
38092// Deprecated: Use NextWithContext() instead.
38093func (iter *VirtualRouterPeeringListResultIterator) Next() error {
38094	return iter.NextWithContext(context.Background())
38095}
38096
38097// NotDone returns true if the enumeration should be started or is not yet complete.
38098func (iter VirtualRouterPeeringListResultIterator) NotDone() bool {
38099	return iter.page.NotDone() && iter.i < len(iter.page.Values())
38100}
38101
38102// Response returns the raw server response from the last page request.
38103func (iter VirtualRouterPeeringListResultIterator) Response() VirtualRouterPeeringListResult {
38104	return iter.page.Response()
38105}
38106
38107// Value returns the current value or a zero-initialized value if the
38108// iterator has advanced beyond the end of the collection.
38109func (iter VirtualRouterPeeringListResultIterator) Value() VirtualRouterPeering {
38110	if !iter.page.NotDone() {
38111		return VirtualRouterPeering{}
38112	}
38113	return iter.page.Values()[iter.i]
38114}
38115
38116// Creates a new instance of the VirtualRouterPeeringListResultIterator type.
38117func NewVirtualRouterPeeringListResultIterator(page VirtualRouterPeeringListResultPage) VirtualRouterPeeringListResultIterator {
38118	return VirtualRouterPeeringListResultIterator{page: page}
38119}
38120
38121// IsEmpty returns true if the ListResult contains no values.
38122func (vrplr VirtualRouterPeeringListResult) IsEmpty() bool {
38123	return vrplr.Value == nil || len(*vrplr.Value) == 0
38124}
38125
38126// virtualRouterPeeringListResultPreparer prepares a request to retrieve the next set of results.
38127// It returns nil if no more results exist.
38128func (vrplr VirtualRouterPeeringListResult) virtualRouterPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
38129	if vrplr.NextLink == nil || len(to.String(vrplr.NextLink)) < 1 {
38130		return nil, nil
38131	}
38132	return autorest.Prepare((&http.Request{}).WithContext(ctx),
38133		autorest.AsJSON(),
38134		autorest.AsGet(),
38135		autorest.WithBaseURL(to.String(vrplr.NextLink)))
38136}
38137
38138// VirtualRouterPeeringListResultPage contains a page of VirtualRouterPeering values.
38139type VirtualRouterPeeringListResultPage struct {
38140	fn    func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)
38141	vrplr VirtualRouterPeeringListResult
38142}
38143
38144// NextWithContext advances to the next page of values.  If there was an error making
38145// the request the page does not advance and the error is returned.
38146func (page *VirtualRouterPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
38147	if tracing.IsEnabled() {
38148		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultPage.NextWithContext")
38149		defer func() {
38150			sc := -1
38151			if page.Response().Response.Response != nil {
38152				sc = page.Response().Response.Response.StatusCode
38153			}
38154			tracing.EndSpan(ctx, sc, err)
38155		}()
38156	}
38157	next, err := page.fn(ctx, page.vrplr)
38158	if err != nil {
38159		return err
38160	}
38161	page.vrplr = next
38162	return nil
38163}
38164
38165// Next advances to the next page of values.  If there was an error making
38166// the request the page does not advance and the error is returned.
38167// Deprecated: Use NextWithContext() instead.
38168func (page *VirtualRouterPeeringListResultPage) Next() error {
38169	return page.NextWithContext(context.Background())
38170}
38171
38172// NotDone returns true if the page enumeration should be started or is not yet complete.
38173func (page VirtualRouterPeeringListResultPage) NotDone() bool {
38174	return !page.vrplr.IsEmpty()
38175}
38176
38177// Response returns the raw server response from the last page request.
38178func (page VirtualRouterPeeringListResultPage) Response() VirtualRouterPeeringListResult {
38179	return page.vrplr
38180}
38181
38182// Values returns the slice of values for the current page or nil if there are no values.
38183func (page VirtualRouterPeeringListResultPage) Values() []VirtualRouterPeering {
38184	if page.vrplr.IsEmpty() {
38185		return nil
38186	}
38187	return *page.vrplr.Value
38188}
38189
38190// Creates a new instance of the VirtualRouterPeeringListResultPage type.
38191func NewVirtualRouterPeeringListResultPage(getNextPage func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)) VirtualRouterPeeringListResultPage {
38192	return VirtualRouterPeeringListResultPage{fn: getNextPage}
38193}
38194
38195// VirtualRouterPeeringProperties properties of the rule group.
38196type VirtualRouterPeeringProperties struct {
38197	// PeerAsn - Peer ASN.
38198	PeerAsn *int64 `json:"peerAsn,omitempty"`
38199	// PeerIP - Peer IP.
38200	PeerIP *string `json:"peerIp,omitempty"`
38201	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
38202	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
38203}
38204
38205// VirtualRouterPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
38206// long-running operation.
38207type VirtualRouterPeeringsCreateOrUpdateFuture struct {
38208	azure.Future
38209}
38210
38211// Result returns the result of the asynchronous operation.
38212// If the operation has not completed it will return an error.
38213func (future *VirtualRouterPeeringsCreateOrUpdateFuture) Result(client VirtualRouterPeeringsClient) (vrp VirtualRouterPeering, err error) {
38214	var done bool
38215	done, err = future.DoneWithContext(context.Background(), client)
38216	if err != nil {
38217		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
38218		return
38219	}
38220	if !done {
38221		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsCreateOrUpdateFuture")
38222		return
38223	}
38224	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
38225	if vrp.Response.Response, err = future.GetResult(sender); err == nil && vrp.Response.Response.StatusCode != http.StatusNoContent {
38226		vrp, err = client.CreateOrUpdateResponder(vrp.Response.Response)
38227		if err != nil {
38228			err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", vrp.Response.Response, "Failure responding to request")
38229		}
38230	}
38231	return
38232}
38233
38234// VirtualRouterPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
38235// long-running operation.
38236type VirtualRouterPeeringsDeleteFuture struct {
38237	azure.Future
38238}
38239
38240// Result returns the result of the asynchronous operation.
38241// If the operation has not completed it will return an error.
38242func (future *VirtualRouterPeeringsDeleteFuture) Result(client VirtualRouterPeeringsClient) (ar autorest.Response, err error) {
38243	var done bool
38244	done, err = future.DoneWithContext(context.Background(), client)
38245	if err != nil {
38246		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
38247		return
38248	}
38249	if !done {
38250		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsDeleteFuture")
38251		return
38252	}
38253	ar.Response = future.Response()
38254	return
38255}
38256
38257// VirtualRouterPropertiesFormat virtual Router definition.
38258type VirtualRouterPropertiesFormat struct {
38259	// VirtualRouterAsn - VirtualRouter ASN.
38260	VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"`
38261	// VirtualRouterIps - VirtualRouter IPs.
38262	VirtualRouterIps *[]string `json:"virtualRouterIps,omitempty"`
38263	// HostedSubnet - The Subnet on which VirtualRouter is hosted.
38264	HostedSubnet *SubResource `json:"hostedSubnet,omitempty"`
38265	// HostedGateway - The Gateway on which VirtualRouter is hosted.
38266	HostedGateway *SubResource `json:"hostedGateway,omitempty"`
38267	// Peerings - READ-ONLY; List of references to VirtualRouterPeerings.
38268	Peerings *[]SubResource `json:"peerings,omitempty"`
38269	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
38270	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
38271}
38272
38273// VirtualRoutersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
38274// long-running operation.
38275type VirtualRoutersCreateOrUpdateFuture struct {
38276	azure.Future
38277}
38278
38279// Result returns the result of the asynchronous operation.
38280// If the operation has not completed it will return an error.
38281func (future *VirtualRoutersCreateOrUpdateFuture) Result(client VirtualRoutersClient) (vr VirtualRouter, err error) {
38282	var done bool
38283	done, err = future.DoneWithContext(context.Background(), client)
38284	if err != nil {
38285		err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
38286		return
38287	}
38288	if !done {
38289		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersCreateOrUpdateFuture")
38290		return
38291	}
38292	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
38293	if vr.Response.Response, err = future.GetResult(sender); err == nil && vr.Response.Response.StatusCode != http.StatusNoContent {
38294		vr, err = client.CreateOrUpdateResponder(vr.Response.Response)
38295		if err != nil {
38296			err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", vr.Response.Response, "Failure responding to request")
38297		}
38298	}
38299	return
38300}
38301
38302// VirtualRoutersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
38303// operation.
38304type VirtualRoutersDeleteFuture struct {
38305	azure.Future
38306}
38307
38308// Result returns the result of the asynchronous operation.
38309// If the operation has not completed it will return an error.
38310func (future *VirtualRoutersDeleteFuture) Result(client VirtualRoutersClient) (ar autorest.Response, err error) {
38311	var done bool
38312	done, err = future.DoneWithContext(context.Background(), client)
38313	if err != nil {
38314		err = autorest.NewErrorWithError(err, "network.VirtualRoutersDeleteFuture", "Result", future.Response(), "Polling failure")
38315		return
38316	}
38317	if !done {
38318		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersDeleteFuture")
38319		return
38320	}
38321	ar.Response = future.Response()
38322	return
38323}
38324
38325// VirtualWAN virtualWAN Resource.
38326type VirtualWAN struct {
38327	autorest.Response `json:"-"`
38328	// VirtualWanProperties - Properties of the virtual WAN.
38329	*VirtualWanProperties `json:"properties,omitempty"`
38330	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
38331	Etag *string `json:"etag,omitempty"`
38332	// ID - Resource ID.
38333	ID *string `json:"id,omitempty"`
38334	// Name - READ-ONLY; Resource name.
38335	Name *string `json:"name,omitempty"`
38336	// Type - READ-ONLY; Resource type.
38337	Type *string `json:"type,omitempty"`
38338	// Location - Resource location.
38339	Location *string `json:"location,omitempty"`
38340	// Tags - Resource tags.
38341	Tags map[string]*string `json:"tags"`
38342}
38343
38344// MarshalJSON is the custom marshaler for VirtualWAN.
38345func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
38346	objectMap := make(map[string]interface{})
38347	if vw.VirtualWanProperties != nil {
38348		objectMap["properties"] = vw.VirtualWanProperties
38349	}
38350	if vw.ID != nil {
38351		objectMap["id"] = vw.ID
38352	}
38353	if vw.Location != nil {
38354		objectMap["location"] = vw.Location
38355	}
38356	if vw.Tags != nil {
38357		objectMap["tags"] = vw.Tags
38358	}
38359	return json.Marshal(objectMap)
38360}
38361
38362// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
38363func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
38364	var m map[string]*json.RawMessage
38365	err := json.Unmarshal(body, &m)
38366	if err != nil {
38367		return err
38368	}
38369	for k, v := range m {
38370		switch k {
38371		case "properties":
38372			if v != nil {
38373				var virtualWanProperties VirtualWanProperties
38374				err = json.Unmarshal(*v, &virtualWanProperties)
38375				if err != nil {
38376					return err
38377				}
38378				vw.VirtualWanProperties = &virtualWanProperties
38379			}
38380		case "etag":
38381			if v != nil {
38382				var etag string
38383				err = json.Unmarshal(*v, &etag)
38384				if err != nil {
38385					return err
38386				}
38387				vw.Etag = &etag
38388			}
38389		case "id":
38390			if v != nil {
38391				var ID string
38392				err = json.Unmarshal(*v, &ID)
38393				if err != nil {
38394					return err
38395				}
38396				vw.ID = &ID
38397			}
38398		case "name":
38399			if v != nil {
38400				var name string
38401				err = json.Unmarshal(*v, &name)
38402				if err != nil {
38403					return err
38404				}
38405				vw.Name = &name
38406			}
38407		case "type":
38408			if v != nil {
38409				var typeVar string
38410				err = json.Unmarshal(*v, &typeVar)
38411				if err != nil {
38412					return err
38413				}
38414				vw.Type = &typeVar
38415			}
38416		case "location":
38417			if v != nil {
38418				var location string
38419				err = json.Unmarshal(*v, &location)
38420				if err != nil {
38421					return err
38422				}
38423				vw.Location = &location
38424			}
38425		case "tags":
38426			if v != nil {
38427				var tags map[string]*string
38428				err = json.Unmarshal(*v, &tags)
38429				if err != nil {
38430					return err
38431				}
38432				vw.Tags = tags
38433			}
38434		}
38435	}
38436
38437	return nil
38438}
38439
38440// VirtualWanProperties parameters for VirtualWAN.
38441type VirtualWanProperties struct {
38442	// DisableVpnEncryption - Vpn encryption to be disabled or not.
38443	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
38444	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
38445	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
38446	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
38447	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
38448	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
38449	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
38450	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
38451	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
38452	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
38453	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
38454	// ProvisioningState - READ-ONLY; The provisioning state of the virtual WAN resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
38455	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
38456	// Type - The type of the VirtualWAN.
38457	Type *string `json:"type,omitempty"`
38458}
38459
38460// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
38461// long-running operation.
38462type VirtualWansCreateOrUpdateFuture struct {
38463	azure.Future
38464}
38465
38466// Result returns the result of the asynchronous operation.
38467// If the operation has not completed it will return an error.
38468func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
38469	var done bool
38470	done, err = future.DoneWithContext(context.Background(), client)
38471	if err != nil {
38472		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
38473		return
38474	}
38475	if !done {
38476		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
38477		return
38478	}
38479	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
38480	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
38481		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
38482		if err != nil {
38483			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
38484		}
38485	}
38486	return
38487}
38488
38489// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
38490// operation.
38491type VirtualWansDeleteFuture struct {
38492	azure.Future
38493}
38494
38495// Result returns the result of the asynchronous operation.
38496// If the operation has not completed it will return an error.
38497func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
38498	var done bool
38499	done, err = future.DoneWithContext(context.Background(), client)
38500	if err != nil {
38501		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
38502		return
38503	}
38504	if !done {
38505		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
38506		return
38507	}
38508	ar.Response = future.Response()
38509	return
38510}
38511
38512// VirtualWanSecurityProvider collection of SecurityProviders.
38513type VirtualWanSecurityProvider struct {
38514	// Name - Name of the security provider.
38515	Name *string `json:"name,omitempty"`
38516	// URL - Url of the security provider.
38517	URL *string `json:"url,omitempty"`
38518	// Type - Name of the security provider. Possible values include: 'External', 'Native'
38519	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
38520}
38521
38522// VirtualWanSecurityProviders collection of SecurityProviders.
38523type VirtualWanSecurityProviders struct {
38524	autorest.Response `json:"-"`
38525	// SupportedProviders - List of VirtualWAN security providers.
38526	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
38527}
38528
38529// VirtualWanVpnProfileParameters virtual Wan Vpn profile parameters Vpn profile generation.
38530type VirtualWanVpnProfileParameters struct {
38531	// VpnServerConfigurationResourceID - VpnServerConfiguration partial resource uri with which VirtualWan is associated to.
38532	VpnServerConfigurationResourceID *string `json:"vpnServerConfigurationResourceId,omitempty"`
38533	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
38534	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
38535}
38536
38537// VM describes a Virtual Machine.
38538type VM struct {
38539	// ID - Resource ID.
38540	ID *string `json:"id,omitempty"`
38541	// Name - READ-ONLY; Resource name.
38542	Name *string `json:"name,omitempty"`
38543	// Type - READ-ONLY; Resource type.
38544	Type *string `json:"type,omitempty"`
38545	// Location - Resource location.
38546	Location *string `json:"location,omitempty"`
38547	// Tags - Resource tags.
38548	Tags map[string]*string `json:"tags"`
38549}
38550
38551// MarshalJSON is the custom marshaler for VM.
38552func (vVar VM) MarshalJSON() ([]byte, error) {
38553	objectMap := make(map[string]interface{})
38554	if vVar.ID != nil {
38555		objectMap["id"] = vVar.ID
38556	}
38557	if vVar.Location != nil {
38558		objectMap["location"] = vVar.Location
38559	}
38560	if vVar.Tags != nil {
38561		objectMap["tags"] = vVar.Tags
38562	}
38563	return json.Marshal(objectMap)
38564}
38565
38566// VnetRoute list of routes that control routing from VirtualHub into a virtual network connection.
38567type VnetRoute struct {
38568	// StaticRoutes - List of all Static Routes.
38569	StaticRoutes *[]StaticRoute `json:"staticRoutes,omitempty"`
38570}
38571
38572// VpnClientConfiguration vpnClientConfiguration for P2S client.
38573type VpnClientConfiguration struct {
38574	// VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient.
38575	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
38576	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
38577	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
38578	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
38579	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
38580	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
38581	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
38582	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
38583	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
38584	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
38585	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
38586	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
38587	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
38588	// RadiusServers - The radiusServers property for multiple radius server configuration.
38589	RadiusServers *[]RadiusServer `json:"radiusServers,omitempty"`
38590	// AadTenant - The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
38591	AadTenant *string `json:"aadTenant,omitempty"`
38592	// AadAudience - The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
38593	AadAudience *string `json:"aadAudience,omitempty"`
38594	// AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
38595	AadIssuer *string `json:"aadIssuer,omitempty"`
38596}
38597
38598// VpnClientConnectionHealth vpnClientConnectionHealth properties.
38599type VpnClientConnectionHealth struct {
38600	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection.
38601	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
38602	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection.
38603	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
38604	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
38605	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
38606	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
38607	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
38608}
38609
38610// VpnClientConnectionHealthDetail VPN client connection health detail.
38611type VpnClientConnectionHealthDetail struct {
38612	// VpnConnectionID - READ-ONLY; The vpn client Id.
38613	VpnConnectionID *string `json:"vpnConnectionId,omitempty"`
38614	// VpnConnectionDuration - READ-ONLY; The duration time of a connected vpn client.
38615	VpnConnectionDuration *int64 `json:"vpnConnectionDuration,omitempty"`
38616	// VpnConnectionTime - READ-ONLY; The start time of a connected vpn client.
38617	VpnConnectionTime *string `json:"vpnConnectionTime,omitempty"`
38618	// PublicIPAddress - READ-ONLY; The public Ip of a connected vpn client.
38619	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
38620	// PrivateIPAddress - READ-ONLY; The assigned private Ip of a connected vpn client.
38621	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
38622	// VpnUserName - READ-ONLY; The user name of a connected vpn client.
38623	VpnUserName *string `json:"vpnUserName,omitempty"`
38624	// MaxBandwidth - READ-ONLY; The max band width.
38625	MaxBandwidth *int64 `json:"maxBandwidth,omitempty"`
38626	// EgressPacketsTransferred - READ-ONLY; The egress packets per second.
38627	EgressPacketsTransferred *int64 `json:"egressPacketsTransferred,omitempty"`
38628	// EgressBytesTransferred - READ-ONLY; The egress bytes per second.
38629	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
38630	// IngressPacketsTransferred - READ-ONLY; The ingress packets per second.
38631	IngressPacketsTransferred *int64 `json:"ingressPacketsTransferred,omitempty"`
38632	// IngressBytesTransferred - READ-ONLY; The ingress bytes per second.
38633	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
38634	// MaxPacketsPerSecond - READ-ONLY; The max packets transferred per second.
38635	MaxPacketsPerSecond *int64 `json:"maxPacketsPerSecond,omitempty"`
38636}
38637
38638// VpnClientConnectionHealthDetailListResult list of virtual network gateway vpn client connection health.
38639type VpnClientConnectionHealthDetailListResult struct {
38640	autorest.Response `json:"-"`
38641	// Value - List of vpn client connection health.
38642	Value *[]VpnClientConnectionHealthDetail `json:"value,omitempty"`
38643}
38644
38645// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
38646type VpnClientIPsecParameters struct {
38647	autorest.Response `json:"-"`
38648	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
38649	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
38650	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
38651	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
38652	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
38653	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
38654	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
38655	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
38656	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
38657	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
38658	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
38659	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
38660	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
38661	DhGroup DhGroup `json:"dhGroup,omitempty"`
38662	// PfsGroup - The Pfs Group used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
38663	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
38664}
38665
38666// VpnClientParameters vpn Client Parameters for package generation.
38667type VpnClientParameters struct {
38668	// ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86'
38669	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
38670	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
38671	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
38672	// RadiusServerAuthCertificate - The public certificate data for the radius server authentication certificate as a Base-64 encoded string. Required only if external radius authentication has been configured with EAPTLS authentication.
38673	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
38674	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
38675	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
38676}
38677
38678// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
38679type VpnClientRevokedCertificate struct {
38680	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
38681	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
38682	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
38683	Name *string `json:"name,omitempty"`
38684	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
38685	Etag *string `json:"etag,omitempty"`
38686	// ID - Resource ID.
38687	ID *string `json:"id,omitempty"`
38688}
38689
38690// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
38691func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
38692	objectMap := make(map[string]interface{})
38693	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
38694		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
38695	}
38696	if vcrc.Name != nil {
38697		objectMap["name"] = vcrc.Name
38698	}
38699	if vcrc.ID != nil {
38700		objectMap["id"] = vcrc.ID
38701	}
38702	return json.Marshal(objectMap)
38703}
38704
38705// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
38706func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
38707	var m map[string]*json.RawMessage
38708	err := json.Unmarshal(body, &m)
38709	if err != nil {
38710		return err
38711	}
38712	for k, v := range m {
38713		switch k {
38714		case "properties":
38715			if v != nil {
38716				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
38717				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
38718				if err != nil {
38719					return err
38720				}
38721				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
38722			}
38723		case "name":
38724			if v != nil {
38725				var name string
38726				err = json.Unmarshal(*v, &name)
38727				if err != nil {
38728					return err
38729				}
38730				vcrc.Name = &name
38731			}
38732		case "etag":
38733			if v != nil {
38734				var etag string
38735				err = json.Unmarshal(*v, &etag)
38736				if err != nil {
38737					return err
38738				}
38739				vcrc.Etag = &etag
38740			}
38741		case "id":
38742			if v != nil {
38743				var ID string
38744				err = json.Unmarshal(*v, &ID)
38745				if err != nil {
38746					return err
38747				}
38748				vcrc.ID = &ID
38749			}
38750		}
38751	}
38752
38753	return nil
38754}
38755
38756// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
38757// network gateway.
38758type VpnClientRevokedCertificatePropertiesFormat struct {
38759	// Thumbprint - The revoked VPN client certificate thumbprint.
38760	Thumbprint *string `json:"thumbprint,omitempty"`
38761	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
38762	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
38763}
38764
38765// VpnClientRootCertificate VPN client root certificate of virtual network gateway.
38766type VpnClientRootCertificate struct {
38767	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
38768	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
38769	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
38770	Name *string `json:"name,omitempty"`
38771	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
38772	Etag *string `json:"etag,omitempty"`
38773	// ID - Resource ID.
38774	ID *string `json:"id,omitempty"`
38775}
38776
38777// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
38778func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
38779	objectMap := make(map[string]interface{})
38780	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
38781		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
38782	}
38783	if vcrc.Name != nil {
38784		objectMap["name"] = vcrc.Name
38785	}
38786	if vcrc.ID != nil {
38787		objectMap["id"] = vcrc.ID
38788	}
38789	return json.Marshal(objectMap)
38790}
38791
38792// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
38793func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
38794	var m map[string]*json.RawMessage
38795	err := json.Unmarshal(body, &m)
38796	if err != nil {
38797		return err
38798	}
38799	for k, v := range m {
38800		switch k {
38801		case "properties":
38802			if v != nil {
38803				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
38804				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
38805				if err != nil {
38806					return err
38807				}
38808				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
38809			}
38810		case "name":
38811			if v != nil {
38812				var name string
38813				err = json.Unmarshal(*v, &name)
38814				if err != nil {
38815					return err
38816				}
38817				vcrc.Name = &name
38818			}
38819		case "etag":
38820			if v != nil {
38821				var etag string
38822				err = json.Unmarshal(*v, &etag)
38823				if err != nil {
38824					return err
38825				}
38826				vcrc.Etag = &etag
38827			}
38828		case "id":
38829			if v != nil {
38830				var ID string
38831				err = json.Unmarshal(*v, &ID)
38832				if err != nil {
38833					return err
38834				}
38835				vcrc.ID = &ID
38836			}
38837		}
38838	}
38839
38840	return nil
38841}
38842
38843// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway.
38844type VpnClientRootCertificatePropertiesFormat struct {
38845	// PublicCertData - The certificate public data.
38846	PublicCertData *string `json:"publicCertData,omitempty"`
38847	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
38848	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
38849}
38850
38851// VpnConnection vpnConnection Resource.
38852type VpnConnection struct {
38853	autorest.Response `json:"-"`
38854	// VpnConnectionProperties - Properties of the VPN connection.
38855	*VpnConnectionProperties `json:"properties,omitempty"`
38856	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
38857	Name *string `json:"name,omitempty"`
38858	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
38859	Etag *string `json:"etag,omitempty"`
38860	// ID - Resource ID.
38861	ID *string `json:"id,omitempty"`
38862}
38863
38864// MarshalJSON is the custom marshaler for VpnConnection.
38865func (vc VpnConnection) MarshalJSON() ([]byte, error) {
38866	objectMap := make(map[string]interface{})
38867	if vc.VpnConnectionProperties != nil {
38868		objectMap["properties"] = vc.VpnConnectionProperties
38869	}
38870	if vc.Name != nil {
38871		objectMap["name"] = vc.Name
38872	}
38873	if vc.ID != nil {
38874		objectMap["id"] = vc.ID
38875	}
38876	return json.Marshal(objectMap)
38877}
38878
38879// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
38880func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
38881	var m map[string]*json.RawMessage
38882	err := json.Unmarshal(body, &m)
38883	if err != nil {
38884		return err
38885	}
38886	for k, v := range m {
38887		switch k {
38888		case "properties":
38889			if v != nil {
38890				var vpnConnectionProperties VpnConnectionProperties
38891				err = json.Unmarshal(*v, &vpnConnectionProperties)
38892				if err != nil {
38893					return err
38894				}
38895				vc.VpnConnectionProperties = &vpnConnectionProperties
38896			}
38897		case "name":
38898			if v != nil {
38899				var name string
38900				err = json.Unmarshal(*v, &name)
38901				if err != nil {
38902					return err
38903				}
38904				vc.Name = &name
38905			}
38906		case "etag":
38907			if v != nil {
38908				var etag string
38909				err = json.Unmarshal(*v, &etag)
38910				if err != nil {
38911					return err
38912				}
38913				vc.Etag = &etag
38914			}
38915		case "id":
38916			if v != nil {
38917				var ID string
38918				err = json.Unmarshal(*v, &ID)
38919				if err != nil {
38920					return err
38921				}
38922				vc.ID = &ID
38923			}
38924		}
38925	}
38926
38927	return nil
38928}
38929
38930// VpnConnectionProperties parameters for VpnConnection.
38931type VpnConnectionProperties struct {
38932	// RemoteVpnSite - Id of the connected vpn site.
38933	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
38934	// RoutingWeight - Routing weight for vpn connection.
38935	RoutingWeight *int32 `json:"routingWeight,omitempty"`
38936	// DpdTimeoutSeconds - The dead peer detection timeout for a vpn connection in seconds.
38937	DpdTimeoutSeconds *int32 `json:"dpdTimeoutSeconds,omitempty"`
38938	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
38939	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
38940	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
38941	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
38942	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
38943	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
38944	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
38945	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
38946	// ConnectionBandwidth - Expected bandwidth in MBPS.
38947	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
38948	// SharedKey - SharedKey for the vpn connection.
38949	SharedKey *string `json:"sharedKey,omitempty"`
38950	// EnableBgp - EnableBgp flag.
38951	EnableBgp *bool `json:"enableBgp,omitempty"`
38952	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
38953	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
38954	// IpsecPolicies - The IPSec Policies to be considered by this connection.
38955	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
38956	// EnableRateLimiting - EnableBgp flag.
38957	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
38958	// EnableInternetSecurity - Enable internet security.
38959	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
38960	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
38961	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
38962	// ProvisioningState - READ-ONLY; The provisioning state of the VPN connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
38963	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
38964	// VpnLinkConnections - List of all vpn site link connections to the gateway.
38965	VpnLinkConnections *[]VpnSiteLinkConnection `json:"vpnLinkConnections,omitempty"`
38966	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
38967	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
38968}
38969
38970// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
38971// long-running operation.
38972type VpnConnectionsCreateOrUpdateFuture struct {
38973	azure.Future
38974}
38975
38976// Result returns the result of the asynchronous operation.
38977// If the operation has not completed it will return an error.
38978func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
38979	var done bool
38980	done, err = future.DoneWithContext(context.Background(), client)
38981	if err != nil {
38982		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
38983		return
38984	}
38985	if !done {
38986		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
38987		return
38988	}
38989	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
38990	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
38991		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
38992		if err != nil {
38993			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
38994		}
38995	}
38996	return
38997}
38998
38999// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
39000// operation.
39001type VpnConnectionsDeleteFuture struct {
39002	azure.Future
39003}
39004
39005// Result returns the result of the asynchronous operation.
39006// If the operation has not completed it will return an error.
39007func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
39008	var done bool
39009	done, err = future.DoneWithContext(context.Background(), client)
39010	if err != nil {
39011		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
39012		return
39013	}
39014	if !done {
39015		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
39016		return
39017	}
39018	ar.Response = future.Response()
39019	return
39020}
39021
39022// VpnDeviceScriptParameters vpn device configuration script generation parameters.
39023type VpnDeviceScriptParameters struct {
39024	// Vendor - The vendor for the vpn device.
39025	Vendor *string `json:"vendor,omitempty"`
39026	// DeviceFamily - The device family for the vpn device.
39027	DeviceFamily *string `json:"deviceFamily,omitempty"`
39028	// FirmwareVersion - The firmware version for the vpn device.
39029	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
39030}
39031
39032// VpnGateway vpnGateway Resource.
39033type VpnGateway struct {
39034	autorest.Response `json:"-"`
39035	// VpnGatewayProperties - Properties of the VPN gateway.
39036	*VpnGatewayProperties `json:"properties,omitempty"`
39037	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39038	Etag *string `json:"etag,omitempty"`
39039	// ID - Resource ID.
39040	ID *string `json:"id,omitempty"`
39041	// Name - READ-ONLY; Resource name.
39042	Name *string `json:"name,omitempty"`
39043	// Type - READ-ONLY; Resource type.
39044	Type *string `json:"type,omitempty"`
39045	// Location - Resource location.
39046	Location *string `json:"location,omitempty"`
39047	// Tags - Resource tags.
39048	Tags map[string]*string `json:"tags"`
39049}
39050
39051// MarshalJSON is the custom marshaler for VpnGateway.
39052func (vg VpnGateway) MarshalJSON() ([]byte, error) {
39053	objectMap := make(map[string]interface{})
39054	if vg.VpnGatewayProperties != nil {
39055		objectMap["properties"] = vg.VpnGatewayProperties
39056	}
39057	if vg.ID != nil {
39058		objectMap["id"] = vg.ID
39059	}
39060	if vg.Location != nil {
39061		objectMap["location"] = vg.Location
39062	}
39063	if vg.Tags != nil {
39064		objectMap["tags"] = vg.Tags
39065	}
39066	return json.Marshal(objectMap)
39067}
39068
39069// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
39070func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
39071	var m map[string]*json.RawMessage
39072	err := json.Unmarshal(body, &m)
39073	if err != nil {
39074		return err
39075	}
39076	for k, v := range m {
39077		switch k {
39078		case "properties":
39079			if v != nil {
39080				var vpnGatewayProperties VpnGatewayProperties
39081				err = json.Unmarshal(*v, &vpnGatewayProperties)
39082				if err != nil {
39083					return err
39084				}
39085				vg.VpnGatewayProperties = &vpnGatewayProperties
39086			}
39087		case "etag":
39088			if v != nil {
39089				var etag string
39090				err = json.Unmarshal(*v, &etag)
39091				if err != nil {
39092					return err
39093				}
39094				vg.Etag = &etag
39095			}
39096		case "id":
39097			if v != nil {
39098				var ID string
39099				err = json.Unmarshal(*v, &ID)
39100				if err != nil {
39101					return err
39102				}
39103				vg.ID = &ID
39104			}
39105		case "name":
39106			if v != nil {
39107				var name string
39108				err = json.Unmarshal(*v, &name)
39109				if err != nil {
39110					return err
39111				}
39112				vg.Name = &name
39113			}
39114		case "type":
39115			if v != nil {
39116				var typeVar string
39117				err = json.Unmarshal(*v, &typeVar)
39118				if err != nil {
39119					return err
39120				}
39121				vg.Type = &typeVar
39122			}
39123		case "location":
39124			if v != nil {
39125				var location string
39126				err = json.Unmarshal(*v, &location)
39127				if err != nil {
39128					return err
39129				}
39130				vg.Location = &location
39131			}
39132		case "tags":
39133			if v != nil {
39134				var tags map[string]*string
39135				err = json.Unmarshal(*v, &tags)
39136				if err != nil {
39137					return err
39138				}
39139				vg.Tags = tags
39140			}
39141		}
39142	}
39143
39144	return nil
39145}
39146
39147// VpnGatewayProperties parameters for VpnGateway.
39148type VpnGatewayProperties struct {
39149	// VirtualHub - The VirtualHub to which the gateway belongs.
39150	VirtualHub *SubResource `json:"virtualHub,omitempty"`
39151	// Connections - List of all vpn connections to the gateway.
39152	Connections *[]VpnConnection `json:"connections,omitempty"`
39153	// BgpSettings - Local network gateway's BGP speaker settings.
39154	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
39155	// ProvisioningState - READ-ONLY; The provisioning state of the VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
39156	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
39157	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
39158	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
39159}
39160
39161// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
39162// long-running operation.
39163type VpnGatewaysCreateOrUpdateFuture struct {
39164	azure.Future
39165}
39166
39167// Result returns the result of the asynchronous operation.
39168// If the operation has not completed it will return an error.
39169func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
39170	var done bool
39171	done, err = future.DoneWithContext(context.Background(), client)
39172	if err != nil {
39173		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
39174		return
39175	}
39176	if !done {
39177		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
39178		return
39179	}
39180	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
39181	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
39182		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
39183		if err != nil {
39184			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
39185		}
39186	}
39187	return
39188}
39189
39190// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
39191// operation.
39192type VpnGatewaysDeleteFuture struct {
39193	azure.Future
39194}
39195
39196// Result returns the result of the asynchronous operation.
39197// If the operation has not completed it will return an error.
39198func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
39199	var done bool
39200	done, err = future.DoneWithContext(context.Background(), client)
39201	if err != nil {
39202		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
39203		return
39204	}
39205	if !done {
39206		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
39207		return
39208	}
39209	ar.Response = future.Response()
39210	return
39211}
39212
39213// VpnGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
39214// operation.
39215type VpnGatewaysResetFuture struct {
39216	azure.Future
39217}
39218
39219// Result returns the result of the asynchronous operation.
39220// If the operation has not completed it will return an error.
39221func (future *VpnGatewaysResetFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
39222	var done bool
39223	done, err = future.DoneWithContext(context.Background(), client)
39224	if err != nil {
39225		err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", future.Response(), "Polling failure")
39226		return
39227	}
39228	if !done {
39229		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysResetFuture")
39230		return
39231	}
39232	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
39233	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
39234		vg, err = client.ResetResponder(vg.Response.Response)
39235		if err != nil {
39236			err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", vg.Response.Response, "Failure responding to request")
39237		}
39238	}
39239	return
39240}
39241
39242// VpnLinkBgpSettings BGP settings details for a link.
39243type VpnLinkBgpSettings struct {
39244	// Asn - The BGP speaker's ASN.
39245	Asn *int64 `json:"asn,omitempty"`
39246	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
39247	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
39248}
39249
39250// VpnLinkProviderProperties list of properties of a link provider.
39251type VpnLinkProviderProperties struct {
39252	// LinkProviderName - Name of the link provider.
39253	LinkProviderName *string `json:"linkProviderName,omitempty"`
39254	// LinkSpeedInMbps - Link speed.
39255	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
39256}
39257
39258// VpnPacketCaptureStartParameters start packet capture parameters on virtual network gateway.
39259type VpnPacketCaptureStartParameters struct {
39260	// FilterData - Start Packet capture parameters.
39261	FilterData *string `json:"filterData,omitempty"`
39262}
39263
39264// VpnPacketCaptureStopParameters stop packet capture parameters.
39265type VpnPacketCaptureStopParameters struct {
39266	// SasURL - SAS url for packet capture on virtual network gateway.
39267	SasURL *string `json:"sasUrl,omitempty"`
39268}
39269
39270// VpnProfileResponse vpn Profile Response for package generation.
39271type VpnProfileResponse struct {
39272	autorest.Response `json:"-"`
39273	// ProfileURL - URL to the VPN profile.
39274	ProfileURL *string `json:"profileUrl,omitempty"`
39275}
39276
39277// VpnServerConfigRadiusClientRootCertificate properties of the Radius client root certificate of
39278// VpnServerConfiguration.
39279type VpnServerConfigRadiusClientRootCertificate struct {
39280	// Name - The certificate name.
39281	Name *string `json:"name,omitempty"`
39282	// Thumbprint - The Radius client root certificate thumbprint.
39283	Thumbprint *string `json:"thumbprint,omitempty"`
39284}
39285
39286// VpnServerConfigRadiusServerRootCertificate properties of Radius Server root certificate of
39287// VpnServerConfiguration.
39288type VpnServerConfigRadiusServerRootCertificate struct {
39289	// Name - The certificate name.
39290	Name *string `json:"name,omitempty"`
39291	// PublicCertData - The certificate public data.
39292	PublicCertData *string `json:"publicCertData,omitempty"`
39293}
39294
39295// VpnServerConfiguration vpnServerConfiguration Resource.
39296type VpnServerConfiguration struct {
39297	autorest.Response `json:"-"`
39298	// VpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
39299	*VpnServerConfigurationProperties `json:"properties,omitempty"`
39300	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39301	Etag *string `json:"etag,omitempty"`
39302	// ID - Resource ID.
39303	ID *string `json:"id,omitempty"`
39304	// Name - READ-ONLY; Resource name.
39305	Name *string `json:"name,omitempty"`
39306	// Type - READ-ONLY; Resource type.
39307	Type *string `json:"type,omitempty"`
39308	// Location - Resource location.
39309	Location *string `json:"location,omitempty"`
39310	// Tags - Resource tags.
39311	Tags map[string]*string `json:"tags"`
39312}
39313
39314// MarshalJSON is the custom marshaler for VpnServerConfiguration.
39315func (vsc VpnServerConfiguration) MarshalJSON() ([]byte, error) {
39316	objectMap := make(map[string]interface{})
39317	if vsc.VpnServerConfigurationProperties != nil {
39318		objectMap["properties"] = vsc.VpnServerConfigurationProperties
39319	}
39320	if vsc.ID != nil {
39321		objectMap["id"] = vsc.ID
39322	}
39323	if vsc.Location != nil {
39324		objectMap["location"] = vsc.Location
39325	}
39326	if vsc.Tags != nil {
39327		objectMap["tags"] = vsc.Tags
39328	}
39329	return json.Marshal(objectMap)
39330}
39331
39332// UnmarshalJSON is the custom unmarshaler for VpnServerConfiguration struct.
39333func (vsc *VpnServerConfiguration) UnmarshalJSON(body []byte) error {
39334	var m map[string]*json.RawMessage
39335	err := json.Unmarshal(body, &m)
39336	if err != nil {
39337		return err
39338	}
39339	for k, v := range m {
39340		switch k {
39341		case "properties":
39342			if v != nil {
39343				var vpnServerConfigurationProperties VpnServerConfigurationProperties
39344				err = json.Unmarshal(*v, &vpnServerConfigurationProperties)
39345				if err != nil {
39346					return err
39347				}
39348				vsc.VpnServerConfigurationProperties = &vpnServerConfigurationProperties
39349			}
39350		case "etag":
39351			if v != nil {
39352				var etag string
39353				err = json.Unmarshal(*v, &etag)
39354				if err != nil {
39355					return err
39356				}
39357				vsc.Etag = &etag
39358			}
39359		case "id":
39360			if v != nil {
39361				var ID string
39362				err = json.Unmarshal(*v, &ID)
39363				if err != nil {
39364					return err
39365				}
39366				vsc.ID = &ID
39367			}
39368		case "name":
39369			if v != nil {
39370				var name string
39371				err = json.Unmarshal(*v, &name)
39372				if err != nil {
39373					return err
39374				}
39375				vsc.Name = &name
39376			}
39377		case "type":
39378			if v != nil {
39379				var typeVar string
39380				err = json.Unmarshal(*v, &typeVar)
39381				if err != nil {
39382					return err
39383				}
39384				vsc.Type = &typeVar
39385			}
39386		case "location":
39387			if v != nil {
39388				var location string
39389				err = json.Unmarshal(*v, &location)
39390				if err != nil {
39391					return err
39392				}
39393				vsc.Location = &location
39394			}
39395		case "tags":
39396			if v != nil {
39397				var tags map[string]*string
39398				err = json.Unmarshal(*v, &tags)
39399				if err != nil {
39400					return err
39401				}
39402				vsc.Tags = tags
39403			}
39404		}
39405	}
39406
39407	return nil
39408}
39409
39410// VpnServerConfigurationProperties parameters for VpnServerConfiguration.
39411type VpnServerConfigurationProperties struct {
39412	// Name - The name of the VpnServerConfiguration that is unique within a resource group.
39413	Name *string `json:"name,omitempty"`
39414	// VpnProtocols - VPN protocols for the VpnServerConfiguration.
39415	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
39416	// VpnAuthenticationTypes - VPN authentication types for the VpnServerConfiguration.
39417	VpnAuthenticationTypes *[]VpnAuthenticationType `json:"vpnAuthenticationTypes,omitempty"`
39418	// VpnClientRootCertificates - VPN client root certificate of VpnServerConfiguration.
39419	VpnClientRootCertificates *[]VpnServerConfigVpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
39420	// VpnClientRevokedCertificates - VPN client revoked certificate of VpnServerConfiguration.
39421	VpnClientRevokedCertificates *[]VpnServerConfigVpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
39422	// RadiusServerRootCertificates - Radius Server root certificate of VpnServerConfiguration.
39423	RadiusServerRootCertificates *[]VpnServerConfigRadiusServerRootCertificate `json:"radiusServerRootCertificates,omitempty"`
39424	// RadiusClientRootCertificates - Radius client root certificate of VpnServerConfiguration.
39425	RadiusClientRootCertificates *[]VpnServerConfigRadiusClientRootCertificate `json:"radiusClientRootCertificates,omitempty"`
39426	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for VpnServerConfiguration.
39427	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
39428	// RadiusServerAddress - The radius server address property of the VpnServerConfiguration resource for point to site client connection.
39429	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
39430	// RadiusServerSecret - The radius secret property of the VpnServerConfiguration resource for point to site client connection.
39431	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
39432	// RadiusServers - Multiple Radius Server configuration for VpnServerConfiguration.
39433	RadiusServers *[]RadiusServer `json:"radiusServers,omitempty"`
39434	// AadAuthenticationParameters - The set of aad vpn authentication parameters.
39435	AadAuthenticationParameters *AadAuthenticationParameters `json:"aadAuthenticationParameters,omitempty"`
39436	// ProvisioningState - READ-ONLY; The provisioning state of the VpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
39437	ProvisioningState *string `json:"provisioningState,omitempty"`
39438	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
39439	P2SVpnGateways *[]P2SVpnGateway `json:"p2SVpnGateways,omitempty"`
39440	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39441	Etag *string `json:"etag,omitempty"`
39442}
39443
39444// VpnServerConfigurationsAssociatedWithVirtualWanListFuture an abstraction for monitoring and retrieving
39445// the results of a long-running operation.
39446type VpnServerConfigurationsAssociatedWithVirtualWanListFuture struct {
39447	azure.Future
39448}
39449
39450// Result returns the result of the asynchronous operation.
39451// If the operation has not completed it will return an error.
39452func (future *VpnServerConfigurationsAssociatedWithVirtualWanListFuture) Result(client VpnServerConfigurationsAssociatedWithVirtualWanClient) (vscr VpnServerConfigurationsResponse, err error) {
39453	var done bool
39454	done, err = future.DoneWithContext(context.Background(), client)
39455	if err != nil {
39456		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", future.Response(), "Polling failure")
39457		return
39458	}
39459	if !done {
39460		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture")
39461		return
39462	}
39463	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
39464	if vscr.Response.Response, err = future.GetResult(sender); err == nil && vscr.Response.Response.StatusCode != http.StatusNoContent {
39465		vscr, err = client.ListResponder(vscr.Response.Response)
39466		if err != nil {
39467			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", vscr.Response.Response, "Failure responding to request")
39468		}
39469	}
39470	return
39471}
39472
39473// VpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
39474// a long-running operation.
39475type VpnServerConfigurationsCreateOrUpdateFuture struct {
39476	azure.Future
39477}
39478
39479// Result returns the result of the asynchronous operation.
39480// If the operation has not completed it will return an error.
39481func (future *VpnServerConfigurationsCreateOrUpdateFuture) Result(client VpnServerConfigurationsClient) (vsc VpnServerConfiguration, err error) {
39482	var done bool
39483	done, err = future.DoneWithContext(context.Background(), client)
39484	if err != nil {
39485		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
39486		return
39487	}
39488	if !done {
39489		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsCreateOrUpdateFuture")
39490		return
39491	}
39492	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
39493	if vsc.Response.Response, err = future.GetResult(sender); err == nil && vsc.Response.Response.StatusCode != http.StatusNoContent {
39494		vsc, err = client.CreateOrUpdateResponder(vsc.Response.Response)
39495		if err != nil {
39496			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", vsc.Response.Response, "Failure responding to request")
39497		}
39498	}
39499	return
39500}
39501
39502// VpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
39503// long-running operation.
39504type VpnServerConfigurationsDeleteFuture struct {
39505	azure.Future
39506}
39507
39508// Result returns the result of the asynchronous operation.
39509// If the operation has not completed it will return an error.
39510func (future *VpnServerConfigurationsDeleteFuture) Result(client VpnServerConfigurationsClient) (ar autorest.Response, err error) {
39511	var done bool
39512	done, err = future.DoneWithContext(context.Background(), client)
39513	if err != nil {
39514		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
39515		return
39516	}
39517	if !done {
39518		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsDeleteFuture")
39519		return
39520	}
39521	ar.Response = future.Response()
39522	return
39523}
39524
39525// VpnServerConfigurationsResponse vpnServerConfigurations list associated with VirtualWan Response.
39526type VpnServerConfigurationsResponse struct {
39527	autorest.Response `json:"-"`
39528	// VpnServerConfigurationResourceIds - List of VpnServerConfigurations associated with VirtualWan.
39529	VpnServerConfigurationResourceIds *[]string `json:"vpnServerConfigurationResourceIds,omitempty"`
39530}
39531
39532// VpnServerConfigVpnClientRevokedCertificate properties of the revoked VPN client certificate of
39533// VpnServerConfiguration.
39534type VpnServerConfigVpnClientRevokedCertificate struct {
39535	// Name - The certificate name.
39536	Name *string `json:"name,omitempty"`
39537	// Thumbprint - The revoked VPN client certificate thumbprint.
39538	Thumbprint *string `json:"thumbprint,omitempty"`
39539}
39540
39541// VpnServerConfigVpnClientRootCertificate properties of VPN client root certificate of
39542// VpnServerConfiguration.
39543type VpnServerConfigVpnClientRootCertificate struct {
39544	// Name - The certificate name.
39545	Name *string `json:"name,omitempty"`
39546	// PublicCertData - The certificate public data.
39547	PublicCertData *string `json:"publicCertData,omitempty"`
39548}
39549
39550// VpnSite vpnSite Resource.
39551type VpnSite struct {
39552	autorest.Response `json:"-"`
39553	// VpnSiteProperties - Properties of the VPN site.
39554	*VpnSiteProperties `json:"properties,omitempty"`
39555	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39556	Etag *string `json:"etag,omitempty"`
39557	// ID - Resource ID.
39558	ID *string `json:"id,omitempty"`
39559	// Name - READ-ONLY; Resource name.
39560	Name *string `json:"name,omitempty"`
39561	// Type - READ-ONLY; Resource type.
39562	Type *string `json:"type,omitempty"`
39563	// Location - Resource location.
39564	Location *string `json:"location,omitempty"`
39565	// Tags - Resource tags.
39566	Tags map[string]*string `json:"tags"`
39567}
39568
39569// MarshalJSON is the custom marshaler for VpnSite.
39570func (vs VpnSite) MarshalJSON() ([]byte, error) {
39571	objectMap := make(map[string]interface{})
39572	if vs.VpnSiteProperties != nil {
39573		objectMap["properties"] = vs.VpnSiteProperties
39574	}
39575	if vs.ID != nil {
39576		objectMap["id"] = vs.ID
39577	}
39578	if vs.Location != nil {
39579		objectMap["location"] = vs.Location
39580	}
39581	if vs.Tags != nil {
39582		objectMap["tags"] = vs.Tags
39583	}
39584	return json.Marshal(objectMap)
39585}
39586
39587// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
39588func (vs *VpnSite) UnmarshalJSON(body []byte) error {
39589	var m map[string]*json.RawMessage
39590	err := json.Unmarshal(body, &m)
39591	if err != nil {
39592		return err
39593	}
39594	for k, v := range m {
39595		switch k {
39596		case "properties":
39597			if v != nil {
39598				var vpnSiteProperties VpnSiteProperties
39599				err = json.Unmarshal(*v, &vpnSiteProperties)
39600				if err != nil {
39601					return err
39602				}
39603				vs.VpnSiteProperties = &vpnSiteProperties
39604			}
39605		case "etag":
39606			if v != nil {
39607				var etag string
39608				err = json.Unmarshal(*v, &etag)
39609				if err != nil {
39610					return err
39611				}
39612				vs.Etag = &etag
39613			}
39614		case "id":
39615			if v != nil {
39616				var ID string
39617				err = json.Unmarshal(*v, &ID)
39618				if err != nil {
39619					return err
39620				}
39621				vs.ID = &ID
39622			}
39623		case "name":
39624			if v != nil {
39625				var name string
39626				err = json.Unmarshal(*v, &name)
39627				if err != nil {
39628					return err
39629				}
39630				vs.Name = &name
39631			}
39632		case "type":
39633			if v != nil {
39634				var typeVar string
39635				err = json.Unmarshal(*v, &typeVar)
39636				if err != nil {
39637					return err
39638				}
39639				vs.Type = &typeVar
39640			}
39641		case "location":
39642			if v != nil {
39643				var location string
39644				err = json.Unmarshal(*v, &location)
39645				if err != nil {
39646					return err
39647				}
39648				vs.Location = &location
39649			}
39650		case "tags":
39651			if v != nil {
39652				var tags map[string]*string
39653				err = json.Unmarshal(*v, &tags)
39654				if err != nil {
39655					return err
39656				}
39657				vs.Tags = tags
39658			}
39659		}
39660	}
39661
39662	return nil
39663}
39664
39665// VpnSiteID vpnSite Resource.
39666type VpnSiteID struct {
39667	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
39668	VpnSite *string `json:"vpnSite,omitempty"`
39669}
39670
39671// VpnSiteLink vpnSiteLink Resource.
39672type VpnSiteLink struct {
39673	autorest.Response `json:"-"`
39674	// VpnSiteLinkProperties - Properties of the VPN site link.
39675	*VpnSiteLinkProperties `json:"properties,omitempty"`
39676	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39677	Etag *string `json:"etag,omitempty"`
39678	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
39679	Name *string `json:"name,omitempty"`
39680	// Type - READ-ONLY; Resource type.
39681	Type *string `json:"type,omitempty"`
39682	// ID - Resource ID.
39683	ID *string `json:"id,omitempty"`
39684}
39685
39686// MarshalJSON is the custom marshaler for VpnSiteLink.
39687func (vsl VpnSiteLink) MarshalJSON() ([]byte, error) {
39688	objectMap := make(map[string]interface{})
39689	if vsl.VpnSiteLinkProperties != nil {
39690		objectMap["properties"] = vsl.VpnSiteLinkProperties
39691	}
39692	if vsl.Name != nil {
39693		objectMap["name"] = vsl.Name
39694	}
39695	if vsl.ID != nil {
39696		objectMap["id"] = vsl.ID
39697	}
39698	return json.Marshal(objectMap)
39699}
39700
39701// UnmarshalJSON is the custom unmarshaler for VpnSiteLink struct.
39702func (vsl *VpnSiteLink) UnmarshalJSON(body []byte) error {
39703	var m map[string]*json.RawMessage
39704	err := json.Unmarshal(body, &m)
39705	if err != nil {
39706		return err
39707	}
39708	for k, v := range m {
39709		switch k {
39710		case "properties":
39711			if v != nil {
39712				var vpnSiteLinkProperties VpnSiteLinkProperties
39713				err = json.Unmarshal(*v, &vpnSiteLinkProperties)
39714				if err != nil {
39715					return err
39716				}
39717				vsl.VpnSiteLinkProperties = &vpnSiteLinkProperties
39718			}
39719		case "etag":
39720			if v != nil {
39721				var etag string
39722				err = json.Unmarshal(*v, &etag)
39723				if err != nil {
39724					return err
39725				}
39726				vsl.Etag = &etag
39727			}
39728		case "name":
39729			if v != nil {
39730				var name string
39731				err = json.Unmarshal(*v, &name)
39732				if err != nil {
39733					return err
39734				}
39735				vsl.Name = &name
39736			}
39737		case "type":
39738			if v != nil {
39739				var typeVar string
39740				err = json.Unmarshal(*v, &typeVar)
39741				if err != nil {
39742					return err
39743				}
39744				vsl.Type = &typeVar
39745			}
39746		case "id":
39747			if v != nil {
39748				var ID string
39749				err = json.Unmarshal(*v, &ID)
39750				if err != nil {
39751					return err
39752				}
39753				vsl.ID = &ID
39754			}
39755		}
39756	}
39757
39758	return nil
39759}
39760
39761// VpnSiteLinkConnection vpnSiteLinkConnection Resource.
39762type VpnSiteLinkConnection struct {
39763	autorest.Response `json:"-"`
39764	// VpnSiteLinkConnectionProperties - Properties of the VPN site link connection.
39765	*VpnSiteLinkConnectionProperties `json:"properties,omitempty"`
39766	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
39767	Name *string `json:"name,omitempty"`
39768	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39769	Etag *string `json:"etag,omitempty"`
39770	// Type - READ-ONLY; Resource type.
39771	Type *string `json:"type,omitempty"`
39772	// ID - Resource ID.
39773	ID *string `json:"id,omitempty"`
39774}
39775
39776// MarshalJSON is the custom marshaler for VpnSiteLinkConnection.
39777func (vslc VpnSiteLinkConnection) MarshalJSON() ([]byte, error) {
39778	objectMap := make(map[string]interface{})
39779	if vslc.VpnSiteLinkConnectionProperties != nil {
39780		objectMap["properties"] = vslc.VpnSiteLinkConnectionProperties
39781	}
39782	if vslc.Name != nil {
39783		objectMap["name"] = vslc.Name
39784	}
39785	if vslc.ID != nil {
39786		objectMap["id"] = vslc.ID
39787	}
39788	return json.Marshal(objectMap)
39789}
39790
39791// UnmarshalJSON is the custom unmarshaler for VpnSiteLinkConnection struct.
39792func (vslc *VpnSiteLinkConnection) UnmarshalJSON(body []byte) error {
39793	var m map[string]*json.RawMessage
39794	err := json.Unmarshal(body, &m)
39795	if err != nil {
39796		return err
39797	}
39798	for k, v := range m {
39799		switch k {
39800		case "properties":
39801			if v != nil {
39802				var vpnSiteLinkConnectionProperties VpnSiteLinkConnectionProperties
39803				err = json.Unmarshal(*v, &vpnSiteLinkConnectionProperties)
39804				if err != nil {
39805					return err
39806				}
39807				vslc.VpnSiteLinkConnectionProperties = &vpnSiteLinkConnectionProperties
39808			}
39809		case "name":
39810			if v != nil {
39811				var name string
39812				err = json.Unmarshal(*v, &name)
39813				if err != nil {
39814					return err
39815				}
39816				vslc.Name = &name
39817			}
39818		case "etag":
39819			if v != nil {
39820				var etag string
39821				err = json.Unmarshal(*v, &etag)
39822				if err != nil {
39823					return err
39824				}
39825				vslc.Etag = &etag
39826			}
39827		case "type":
39828			if v != nil {
39829				var typeVar string
39830				err = json.Unmarshal(*v, &typeVar)
39831				if err != nil {
39832					return err
39833				}
39834				vslc.Type = &typeVar
39835			}
39836		case "id":
39837			if v != nil {
39838				var ID string
39839				err = json.Unmarshal(*v, &ID)
39840				if err != nil {
39841					return err
39842				}
39843				vslc.ID = &ID
39844			}
39845		}
39846	}
39847
39848	return nil
39849}
39850
39851// VpnSiteLinkConnectionProperties parameters for VpnConnection.
39852type VpnSiteLinkConnectionProperties struct {
39853	// VpnSiteLink - Id of the connected vpn site link.
39854	VpnSiteLink *SubResource `json:"vpnSiteLink,omitempty"`
39855	// RoutingWeight - Routing weight for vpn connection.
39856	RoutingWeight *int32 `json:"routingWeight,omitempty"`
39857	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
39858	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
39859	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
39860	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
39861	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
39862	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
39863	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
39864	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
39865	// ConnectionBandwidth - Expected bandwidth in MBPS.
39866	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
39867	// SharedKey - SharedKey for the vpn connection.
39868	SharedKey *string `json:"sharedKey,omitempty"`
39869	// EnableBgp - EnableBgp flag.
39870	EnableBgp *bool `json:"enableBgp,omitempty"`
39871	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
39872	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
39873	// IpsecPolicies - The IPSec Policies to be considered by this connection.
39874	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
39875	// EnableRateLimiting - EnableBgp flag.
39876	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
39877	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
39878	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
39879	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site link connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
39880	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
39881}
39882
39883// VpnSiteLinkProperties parameters for VpnSite.
39884type VpnSiteLinkProperties struct {
39885	// LinkProperties - The link provider properties.
39886	LinkProperties *VpnLinkProviderProperties `json:"linkProperties,omitempty"`
39887	// IPAddress - The ip-address for the vpn-site-link.
39888	IPAddress *string `json:"ipAddress,omitempty"`
39889	// Fqdn - FQDN of vpn-site-link.
39890	Fqdn *string `json:"fqdn,omitempty"`
39891	// BgpProperties - The set of bgp properties.
39892	BgpProperties *VpnLinkBgpSettings `json:"bgpProperties,omitempty"`
39893	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
39894	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
39895}
39896
39897// VpnSiteProperties parameters for VpnSite.
39898type VpnSiteProperties struct {
39899	// VirtualWan - The VirtualWAN to which the vpnSite belongs.
39900	VirtualWan *SubResource `json:"virtualWan,omitempty"`
39901	// DeviceProperties - The device properties.
39902	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
39903	// IPAddress - The ip-address for the vpn-site.
39904	IPAddress *string `json:"ipAddress,omitempty"`
39905	// SiteKey - The key for vpn-site that can be used for connections.
39906	SiteKey *string `json:"siteKey,omitempty"`
39907	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
39908	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
39909	// BgpProperties - The set of bgp properties.
39910	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
39911	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
39912	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
39913	// IsSecuritySite - IsSecuritySite flag.
39914	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
39915	// VpnSiteLinks - List of all vpn site links.
39916	VpnSiteLinks *[]VpnSiteLink `json:"vpnSiteLinks,omitempty"`
39917}
39918
39919// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
39920// long-running operation.
39921type VpnSitesConfigurationDownloadFuture struct {
39922	azure.Future
39923}
39924
39925// Result returns the result of the asynchronous operation.
39926// If the operation has not completed it will return an error.
39927func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
39928	var done bool
39929	done, err = future.DoneWithContext(context.Background(), client)
39930	if err != nil {
39931		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
39932		return
39933	}
39934	if !done {
39935		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
39936		return
39937	}
39938	ar.Response = future.Response()
39939	return
39940}
39941
39942// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
39943// operation.
39944type VpnSitesCreateOrUpdateFuture struct {
39945	azure.Future
39946}
39947
39948// Result returns the result of the asynchronous operation.
39949// If the operation has not completed it will return an error.
39950func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
39951	var done bool
39952	done, err = future.DoneWithContext(context.Background(), client)
39953	if err != nil {
39954		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
39955		return
39956	}
39957	if !done {
39958		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
39959		return
39960	}
39961	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
39962	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
39963		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
39964		if err != nil {
39965			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
39966		}
39967	}
39968	return
39969}
39970
39971// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
39972// operation.
39973type VpnSitesDeleteFuture struct {
39974	azure.Future
39975}
39976
39977// Result returns the result of the asynchronous operation.
39978// If the operation has not completed it will return an error.
39979func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
39980	var done bool
39981	done, err = future.DoneWithContext(context.Background(), client)
39982	if err != nil {
39983		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
39984		return
39985	}
39986	if !done {
39987		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
39988		return
39989	}
39990	ar.Response = future.Response()
39991	return
39992}
39993
39994// Watcher network watcher in a resource group.
39995type Watcher struct {
39996	autorest.Response `json:"-"`
39997	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
39998	Etag *string `json:"etag,omitempty"`
39999	// WatcherPropertiesFormat - Properties of the network watcher.
40000	*WatcherPropertiesFormat `json:"properties,omitempty"`
40001	// ID - Resource ID.
40002	ID *string `json:"id,omitempty"`
40003	// Name - READ-ONLY; Resource name.
40004	Name *string `json:"name,omitempty"`
40005	// Type - READ-ONLY; Resource type.
40006	Type *string `json:"type,omitempty"`
40007	// Location - Resource location.
40008	Location *string `json:"location,omitempty"`
40009	// Tags - Resource tags.
40010	Tags map[string]*string `json:"tags"`
40011}
40012
40013// MarshalJSON is the custom marshaler for Watcher.
40014func (w Watcher) MarshalJSON() ([]byte, error) {
40015	objectMap := make(map[string]interface{})
40016	if w.WatcherPropertiesFormat != nil {
40017		objectMap["properties"] = w.WatcherPropertiesFormat
40018	}
40019	if w.ID != nil {
40020		objectMap["id"] = w.ID
40021	}
40022	if w.Location != nil {
40023		objectMap["location"] = w.Location
40024	}
40025	if w.Tags != nil {
40026		objectMap["tags"] = w.Tags
40027	}
40028	return json.Marshal(objectMap)
40029}
40030
40031// UnmarshalJSON is the custom unmarshaler for Watcher struct.
40032func (w *Watcher) UnmarshalJSON(body []byte) error {
40033	var m map[string]*json.RawMessage
40034	err := json.Unmarshal(body, &m)
40035	if err != nil {
40036		return err
40037	}
40038	for k, v := range m {
40039		switch k {
40040		case "etag":
40041			if v != nil {
40042				var etag string
40043				err = json.Unmarshal(*v, &etag)
40044				if err != nil {
40045					return err
40046				}
40047				w.Etag = &etag
40048			}
40049		case "properties":
40050			if v != nil {
40051				var watcherPropertiesFormat WatcherPropertiesFormat
40052				err = json.Unmarshal(*v, &watcherPropertiesFormat)
40053				if err != nil {
40054					return err
40055				}
40056				w.WatcherPropertiesFormat = &watcherPropertiesFormat
40057			}
40058		case "id":
40059			if v != nil {
40060				var ID string
40061				err = json.Unmarshal(*v, &ID)
40062				if err != nil {
40063					return err
40064				}
40065				w.ID = &ID
40066			}
40067		case "name":
40068			if v != nil {
40069				var name string
40070				err = json.Unmarshal(*v, &name)
40071				if err != nil {
40072					return err
40073				}
40074				w.Name = &name
40075			}
40076		case "type":
40077			if v != nil {
40078				var typeVar string
40079				err = json.Unmarshal(*v, &typeVar)
40080				if err != nil {
40081					return err
40082				}
40083				w.Type = &typeVar
40084			}
40085		case "location":
40086			if v != nil {
40087				var location string
40088				err = json.Unmarshal(*v, &location)
40089				if err != nil {
40090					return err
40091				}
40092				w.Location = &location
40093			}
40094		case "tags":
40095			if v != nil {
40096				var tags map[string]*string
40097				err = json.Unmarshal(*v, &tags)
40098				if err != nil {
40099					return err
40100				}
40101				w.Tags = tags
40102			}
40103		}
40104	}
40105
40106	return nil
40107}
40108
40109// WatcherListResult response for ListNetworkWatchers API service call.
40110type WatcherListResult struct {
40111	autorest.Response `json:"-"`
40112	// Value - List of network watcher resources.
40113	Value *[]Watcher `json:"value,omitempty"`
40114}
40115
40116// WatcherPropertiesFormat the network watcher properties.
40117type WatcherPropertiesFormat struct {
40118	// ProvisioningState - READ-ONLY; The provisioning state of the network watcher resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
40119	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
40120}
40121
40122// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
40123// long-running operation.
40124type WatchersCheckConnectivityFuture struct {
40125	azure.Future
40126}
40127
40128// Result returns the result of the asynchronous operation.
40129// If the operation has not completed it will return an error.
40130func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
40131	var done bool
40132	done, err = future.DoneWithContext(context.Background(), client)
40133	if err != nil {
40134		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
40135		return
40136	}
40137	if !done {
40138		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
40139		return
40140	}
40141	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40142	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
40143		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
40144		if err != nil {
40145			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
40146		}
40147	}
40148	return
40149}
40150
40151// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
40152// operation.
40153type WatchersDeleteFuture struct {
40154	azure.Future
40155}
40156
40157// Result returns the result of the asynchronous operation.
40158// If the operation has not completed it will return an error.
40159func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
40160	var done bool
40161	done, err = future.DoneWithContext(context.Background(), client)
40162	if err != nil {
40163		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
40164		return
40165	}
40166	if !done {
40167		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
40168		return
40169	}
40170	ar.Response = future.Response()
40171	return
40172}
40173
40174// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
40175// long-running operation.
40176type WatchersGetAzureReachabilityReportFuture struct {
40177	azure.Future
40178}
40179
40180// Result returns the result of the asynchronous operation.
40181// If the operation has not completed it will return an error.
40182func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
40183	var done bool
40184	done, err = future.DoneWithContext(context.Background(), client)
40185	if err != nil {
40186		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
40187		return
40188	}
40189	if !done {
40190		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
40191		return
40192	}
40193	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40194	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
40195		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
40196		if err != nil {
40197			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
40198		}
40199	}
40200	return
40201}
40202
40203// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
40204// long-running operation.
40205type WatchersGetFlowLogStatusFuture struct {
40206	azure.Future
40207}
40208
40209// Result returns the result of the asynchronous operation.
40210// If the operation has not completed it will return an error.
40211func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
40212	var done bool
40213	done, err = future.DoneWithContext(context.Background(), client)
40214	if err != nil {
40215		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
40216		return
40217	}
40218	if !done {
40219		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
40220		return
40221	}
40222	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40223	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
40224		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
40225		if err != nil {
40226			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
40227		}
40228	}
40229	return
40230}
40231
40232// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
40233// of a long-running operation.
40234type WatchersGetNetworkConfigurationDiagnosticFuture struct {
40235	azure.Future
40236}
40237
40238// Result returns the result of the asynchronous operation.
40239// If the operation has not completed it will return an error.
40240func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
40241	var done bool
40242	done, err = future.DoneWithContext(context.Background(), client)
40243	if err != nil {
40244		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
40245		return
40246	}
40247	if !done {
40248		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
40249		return
40250	}
40251	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40252	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
40253		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
40254		if err != nil {
40255			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
40256		}
40257	}
40258	return
40259}
40260
40261// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
40262// operation.
40263type WatchersGetNextHopFuture struct {
40264	azure.Future
40265}
40266
40267// Result returns the result of the asynchronous operation.
40268// If the operation has not completed it will return an error.
40269func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
40270	var done bool
40271	done, err = future.DoneWithContext(context.Background(), client)
40272	if err != nil {
40273		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
40274		return
40275	}
40276	if !done {
40277		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
40278		return
40279	}
40280	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40281	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
40282		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
40283		if err != nil {
40284			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
40285		}
40286	}
40287	return
40288}
40289
40290// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
40291// long-running operation.
40292type WatchersGetTroubleshootingFuture struct {
40293	azure.Future
40294}
40295
40296// Result returns the result of the asynchronous operation.
40297// If the operation has not completed it will return an error.
40298func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
40299	var done bool
40300	done, err = future.DoneWithContext(context.Background(), client)
40301	if err != nil {
40302		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
40303		return
40304	}
40305	if !done {
40306		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
40307		return
40308	}
40309	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40310	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
40311		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
40312		if err != nil {
40313			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
40314		}
40315	}
40316	return
40317}
40318
40319// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
40320// long-running operation.
40321type WatchersGetTroubleshootingResultFuture struct {
40322	azure.Future
40323}
40324
40325// Result returns the result of the asynchronous operation.
40326// If the operation has not completed it will return an error.
40327func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
40328	var done bool
40329	done, err = future.DoneWithContext(context.Background(), client)
40330	if err != nil {
40331		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
40332		return
40333	}
40334	if !done {
40335		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
40336		return
40337	}
40338	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40339	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
40340		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
40341		if err != nil {
40342			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
40343		}
40344	}
40345	return
40346}
40347
40348// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
40349// long-running operation.
40350type WatchersGetVMSecurityRulesFuture struct {
40351	azure.Future
40352}
40353
40354// Result returns the result of the asynchronous operation.
40355// If the operation has not completed it will return an error.
40356func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
40357	var done bool
40358	done, err = future.DoneWithContext(context.Background(), client)
40359	if err != nil {
40360		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
40361		return
40362	}
40363	if !done {
40364		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
40365		return
40366	}
40367	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40368	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
40369		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
40370		if err != nil {
40371			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
40372		}
40373	}
40374	return
40375}
40376
40377// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
40378// long-running operation.
40379type WatchersListAvailableProvidersFuture struct {
40380	azure.Future
40381}
40382
40383// Result returns the result of the asynchronous operation.
40384// If the operation has not completed it will return an error.
40385func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
40386	var done bool
40387	done, err = future.DoneWithContext(context.Background(), client)
40388	if err != nil {
40389		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
40390		return
40391	}
40392	if !done {
40393		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
40394		return
40395	}
40396	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40397	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
40398		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
40399		if err != nil {
40400			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
40401		}
40402	}
40403	return
40404}
40405
40406// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
40407// long-running operation.
40408type WatchersSetFlowLogConfigurationFuture struct {
40409	azure.Future
40410}
40411
40412// Result returns the result of the asynchronous operation.
40413// If the operation has not completed it will return an error.
40414func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
40415	var done bool
40416	done, err = future.DoneWithContext(context.Background(), client)
40417	if err != nil {
40418		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
40419		return
40420	}
40421	if !done {
40422		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
40423		return
40424	}
40425	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40426	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
40427		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
40428		if err != nil {
40429			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
40430		}
40431	}
40432	return
40433}
40434
40435// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
40436// operation.
40437type WatchersVerifyIPFlowFuture struct {
40438	azure.Future
40439}
40440
40441// Result returns the result of the asynchronous operation.
40442// If the operation has not completed it will return an error.
40443func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
40444	var done bool
40445	done, err = future.DoneWithContext(context.Background(), client)
40446	if err != nil {
40447		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
40448		return
40449	}
40450	if !done {
40451		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
40452		return
40453	}
40454	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
40455	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
40456		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
40457		if err != nil {
40458			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
40459		}
40460	}
40461	return
40462}
40463
40464// WebApplicationFirewallCustomRule defines contents of a web application rule.
40465type WebApplicationFirewallCustomRule struct {
40466	// Name - The name of the resource that is unique within a policy. This name can be used to access the resource.
40467	Name *string `json:"name,omitempty"`
40468	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
40469	Etag *string `json:"etag,omitempty"`
40470	// Priority - Priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.
40471	Priority *int32 `json:"priority,omitempty"`
40472	// RuleType - The rule type. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
40473	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
40474	// MatchConditions - List of match conditions.
40475	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
40476	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
40477	Action WebApplicationFirewallAction `json:"action,omitempty"`
40478}
40479
40480// WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
40481// long-running operation.
40482type WebApplicationFirewallPoliciesDeleteFuture struct {
40483	azure.Future
40484}
40485
40486// Result returns the result of the asynchronous operation.
40487// If the operation has not completed it will return an error.
40488func (future *WebApplicationFirewallPoliciesDeleteFuture) Result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
40489	var done bool
40490	done, err = future.DoneWithContext(context.Background(), client)
40491	if err != nil {
40492		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
40493		return
40494	}
40495	if !done {
40496		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
40497		return
40498	}
40499	ar.Response = future.Response()
40500	return
40501}
40502
40503// WebApplicationFirewallPolicy defines web application firewall policy.
40504type WebApplicationFirewallPolicy struct {
40505	autorest.Response `json:"-"`
40506	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
40507	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
40508	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
40509	Etag *string `json:"etag,omitempty"`
40510	// ID - Resource ID.
40511	ID *string `json:"id,omitempty"`
40512	// Name - READ-ONLY; Resource name.
40513	Name *string `json:"name,omitempty"`
40514	// Type - READ-ONLY; Resource type.
40515	Type *string `json:"type,omitempty"`
40516	// Location - Resource location.
40517	Location *string `json:"location,omitempty"`
40518	// Tags - Resource tags.
40519	Tags map[string]*string `json:"tags"`
40520}
40521
40522// MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
40523func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
40524	objectMap := make(map[string]interface{})
40525	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
40526		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
40527	}
40528	if wafp.ID != nil {
40529		objectMap["id"] = wafp.ID
40530	}
40531	if wafp.Location != nil {
40532		objectMap["location"] = wafp.Location
40533	}
40534	if wafp.Tags != nil {
40535		objectMap["tags"] = wafp.Tags
40536	}
40537	return json.Marshal(objectMap)
40538}
40539
40540// UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
40541func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
40542	var m map[string]*json.RawMessage
40543	err := json.Unmarshal(body, &m)
40544	if err != nil {
40545		return err
40546	}
40547	for k, v := range m {
40548		switch k {
40549		case "properties":
40550			if v != nil {
40551				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
40552				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
40553				if err != nil {
40554					return err
40555				}
40556				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
40557			}
40558		case "etag":
40559			if v != nil {
40560				var etag string
40561				err = json.Unmarshal(*v, &etag)
40562				if err != nil {
40563					return err
40564				}
40565				wafp.Etag = &etag
40566			}
40567		case "id":
40568			if v != nil {
40569				var ID string
40570				err = json.Unmarshal(*v, &ID)
40571				if err != nil {
40572					return err
40573				}
40574				wafp.ID = &ID
40575			}
40576		case "name":
40577			if v != nil {
40578				var name string
40579				err = json.Unmarshal(*v, &name)
40580				if err != nil {
40581					return err
40582				}
40583				wafp.Name = &name
40584			}
40585		case "type":
40586			if v != nil {
40587				var typeVar string
40588				err = json.Unmarshal(*v, &typeVar)
40589				if err != nil {
40590					return err
40591				}
40592				wafp.Type = &typeVar
40593			}
40594		case "location":
40595			if v != nil {
40596				var location string
40597				err = json.Unmarshal(*v, &location)
40598				if err != nil {
40599					return err
40600				}
40601				wafp.Location = &location
40602			}
40603		case "tags":
40604			if v != nil {
40605				var tags map[string]*string
40606				err = json.Unmarshal(*v, &tags)
40607				if err != nil {
40608					return err
40609				}
40610				wafp.Tags = tags
40611			}
40612		}
40613	}
40614
40615	return nil
40616}
40617
40618// WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
40619// contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
40620type WebApplicationFirewallPolicyListResult struct {
40621	autorest.Response `json:"-"`
40622	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
40623	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
40624	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
40625	NextLink *string `json:"nextLink,omitempty"`
40626}
40627
40628// WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
40629// WebApplicationFirewallPolicy values.
40630type WebApplicationFirewallPolicyListResultIterator struct {
40631	i    int
40632	page WebApplicationFirewallPolicyListResultPage
40633}
40634
40635// NextWithContext advances to the next value.  If there was an error making
40636// the request the iterator does not advance and the error is returned.
40637func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
40638	if tracing.IsEnabled() {
40639		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
40640		defer func() {
40641			sc := -1
40642			if iter.Response().Response.Response != nil {
40643				sc = iter.Response().Response.Response.StatusCode
40644			}
40645			tracing.EndSpan(ctx, sc, err)
40646		}()
40647	}
40648	iter.i++
40649	if iter.i < len(iter.page.Values()) {
40650		return nil
40651	}
40652	err = iter.page.NextWithContext(ctx)
40653	if err != nil {
40654		iter.i--
40655		return err
40656	}
40657	iter.i = 0
40658	return nil
40659}
40660
40661// Next advances to the next value.  If there was an error making
40662// the request the iterator does not advance and the error is returned.
40663// Deprecated: Use NextWithContext() instead.
40664func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
40665	return iter.NextWithContext(context.Background())
40666}
40667
40668// NotDone returns true if the enumeration should be started or is not yet complete.
40669func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
40670	return iter.page.NotDone() && iter.i < len(iter.page.Values())
40671}
40672
40673// Response returns the raw server response from the last page request.
40674func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
40675	return iter.page.Response()
40676}
40677
40678// Value returns the current value or a zero-initialized value if the
40679// iterator has advanced beyond the end of the collection.
40680func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
40681	if !iter.page.NotDone() {
40682		return WebApplicationFirewallPolicy{}
40683	}
40684	return iter.page.Values()[iter.i]
40685}
40686
40687// Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
40688func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
40689	return WebApplicationFirewallPolicyListResultIterator{page: page}
40690}
40691
40692// IsEmpty returns true if the ListResult contains no values.
40693func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
40694	return wafplr.Value == nil || len(*wafplr.Value) == 0
40695}
40696
40697// webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
40698// It returns nil if no more results exist.
40699func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
40700	if wafplr.NextLink == nil || len(to.String(wafplr.NextLink)) < 1 {
40701		return nil, nil
40702	}
40703	return autorest.Prepare((&http.Request{}).WithContext(ctx),
40704		autorest.AsJSON(),
40705		autorest.AsGet(),
40706		autorest.WithBaseURL(to.String(wafplr.NextLink)))
40707}
40708
40709// WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
40710type WebApplicationFirewallPolicyListResultPage struct {
40711	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
40712	wafplr WebApplicationFirewallPolicyListResult
40713}
40714
40715// NextWithContext advances to the next page of values.  If there was an error making
40716// the request the page does not advance and the error is returned.
40717func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
40718	if tracing.IsEnabled() {
40719		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
40720		defer func() {
40721			sc := -1
40722			if page.Response().Response.Response != nil {
40723				sc = page.Response().Response.Response.StatusCode
40724			}
40725			tracing.EndSpan(ctx, sc, err)
40726		}()
40727	}
40728	next, err := page.fn(ctx, page.wafplr)
40729	if err != nil {
40730		return err
40731	}
40732	page.wafplr = next
40733	return nil
40734}
40735
40736// Next advances to the next page of values.  If there was an error making
40737// the request the page does not advance and the error is returned.
40738// Deprecated: Use NextWithContext() instead.
40739func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
40740	return page.NextWithContext(context.Background())
40741}
40742
40743// NotDone returns true if the page enumeration should be started or is not yet complete.
40744func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
40745	return !page.wafplr.IsEmpty()
40746}
40747
40748// Response returns the raw server response from the last page request.
40749func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
40750	return page.wafplr
40751}
40752
40753// Values returns the slice of values for the current page or nil if there are no values.
40754func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
40755	if page.wafplr.IsEmpty() {
40756		return nil
40757	}
40758	return *page.wafplr.Value
40759}
40760
40761// Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
40762func NewWebApplicationFirewallPolicyListResultPage(getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
40763	return WebApplicationFirewallPolicyListResultPage{fn: getNextPage}
40764}
40765
40766// WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties.
40767type WebApplicationFirewallPolicyPropertiesFormat struct {
40768	// PolicySettings - The PolicySettings for policy.
40769	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
40770	// CustomRules - The custom rules inside the policy.
40771	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
40772	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
40773	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
40774	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
40775	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
40776	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
40777	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
40778	// ManagedRules - Describes the managedRules structure.
40779	ManagedRules *ManagedRulesDefinition `json:"managedRules,omitempty"`
40780	// HTTPListeners - READ-ONLY; A collection of references to application gateway http listeners.
40781	HTTPListeners *[]SubResource `json:"httpListeners,omitempty"`
40782	// PathBasedRules - READ-ONLY; A collection of references to application gateway path rules.
40783	PathBasedRules *[]SubResource `json:"pathBasedRules,omitempty"`
40784}
40785