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/2019-07-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// AzureFirewallThreatIntelMode enumerates the values for azure firewall threat intel mode.
459type AzureFirewallThreatIntelMode string
460
461const (
462	// AzureFirewallThreatIntelModeAlert ...
463	AzureFirewallThreatIntelModeAlert AzureFirewallThreatIntelMode = "Alert"
464	// AzureFirewallThreatIntelModeDeny ...
465	AzureFirewallThreatIntelModeDeny AzureFirewallThreatIntelMode = "Deny"
466	// AzureFirewallThreatIntelModeOff ...
467	AzureFirewallThreatIntelModeOff AzureFirewallThreatIntelMode = "Off"
468)
469
470// PossibleAzureFirewallThreatIntelModeValues returns an array of possible values for the AzureFirewallThreatIntelMode const type.
471func PossibleAzureFirewallThreatIntelModeValues() []AzureFirewallThreatIntelMode {
472	return []AzureFirewallThreatIntelMode{AzureFirewallThreatIntelModeAlert, AzureFirewallThreatIntelModeDeny, AzureFirewallThreatIntelModeOff}
473}
474
475// BgpPeerState enumerates the values for bgp peer state.
476type BgpPeerState string
477
478const (
479	// BgpPeerStateConnected ...
480	BgpPeerStateConnected BgpPeerState = "Connected"
481	// BgpPeerStateConnecting ...
482	BgpPeerStateConnecting BgpPeerState = "Connecting"
483	// BgpPeerStateIdle ...
484	BgpPeerStateIdle BgpPeerState = "Idle"
485	// BgpPeerStateStopped ...
486	BgpPeerStateStopped BgpPeerState = "Stopped"
487	// BgpPeerStateUnknown ...
488	BgpPeerStateUnknown BgpPeerState = "Unknown"
489)
490
491// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
492func PossibleBgpPeerStateValues() []BgpPeerState {
493	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
494}
495
496// CircuitConnectionStatus enumerates the values for circuit connection status.
497type CircuitConnectionStatus string
498
499const (
500	// Connected ...
501	Connected CircuitConnectionStatus = "Connected"
502	// Connecting ...
503	Connecting CircuitConnectionStatus = "Connecting"
504	// Disconnected ...
505	Disconnected CircuitConnectionStatus = "Disconnected"
506)
507
508// PossibleCircuitConnectionStatusValues returns an array of possible values for the CircuitConnectionStatus const type.
509func PossibleCircuitConnectionStatusValues() []CircuitConnectionStatus {
510	return []CircuitConnectionStatus{Connected, Connecting, Disconnected}
511}
512
513// ConnectionMonitorSourceStatus enumerates the values for connection monitor source status.
514type ConnectionMonitorSourceStatus string
515
516const (
517	// ConnectionMonitorSourceStatusActive ...
518	ConnectionMonitorSourceStatusActive ConnectionMonitorSourceStatus = "Active"
519	// ConnectionMonitorSourceStatusInactive ...
520	ConnectionMonitorSourceStatusInactive ConnectionMonitorSourceStatus = "Inactive"
521	// ConnectionMonitorSourceStatusUnknown ...
522	ConnectionMonitorSourceStatusUnknown ConnectionMonitorSourceStatus = "Unknown"
523)
524
525// PossibleConnectionMonitorSourceStatusValues returns an array of possible values for the ConnectionMonitorSourceStatus const type.
526func PossibleConnectionMonitorSourceStatusValues() []ConnectionMonitorSourceStatus {
527	return []ConnectionMonitorSourceStatus{ConnectionMonitorSourceStatusActive, ConnectionMonitorSourceStatusInactive, ConnectionMonitorSourceStatusUnknown}
528}
529
530// ConnectionState enumerates the values for connection state.
531type ConnectionState string
532
533const (
534	// ConnectionStateReachable ...
535	ConnectionStateReachable ConnectionState = "Reachable"
536	// ConnectionStateUnknown ...
537	ConnectionStateUnknown ConnectionState = "Unknown"
538	// ConnectionStateUnreachable ...
539	ConnectionStateUnreachable ConnectionState = "Unreachable"
540)
541
542// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
543func PossibleConnectionStateValues() []ConnectionState {
544	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
545}
546
547// ConnectionStatus enumerates the values for connection status.
548type ConnectionStatus string
549
550const (
551	// ConnectionStatusConnected ...
552	ConnectionStatusConnected ConnectionStatus = "Connected"
553	// ConnectionStatusDegraded ...
554	ConnectionStatusDegraded ConnectionStatus = "Degraded"
555	// ConnectionStatusDisconnected ...
556	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
557	// ConnectionStatusUnknown ...
558	ConnectionStatusUnknown ConnectionStatus = "Unknown"
559)
560
561// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
562func PossibleConnectionStatusValues() []ConnectionStatus {
563	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
564}
565
566// DdosCustomPolicyProtocol enumerates the values for ddos custom policy protocol.
567type DdosCustomPolicyProtocol string
568
569const (
570	// DdosCustomPolicyProtocolSyn ...
571	DdosCustomPolicyProtocolSyn DdosCustomPolicyProtocol = "Syn"
572	// DdosCustomPolicyProtocolTCP ...
573	DdosCustomPolicyProtocolTCP DdosCustomPolicyProtocol = "Tcp"
574	// DdosCustomPolicyProtocolUDP ...
575	DdosCustomPolicyProtocolUDP DdosCustomPolicyProtocol = "Udp"
576)
577
578// PossibleDdosCustomPolicyProtocolValues returns an array of possible values for the DdosCustomPolicyProtocol const type.
579func PossibleDdosCustomPolicyProtocolValues() []DdosCustomPolicyProtocol {
580	return []DdosCustomPolicyProtocol{DdosCustomPolicyProtocolSyn, DdosCustomPolicyProtocolTCP, DdosCustomPolicyProtocolUDP}
581}
582
583// DdosCustomPolicyTriggerSensitivityOverride enumerates the values for ddos custom policy trigger sensitivity
584// override.
585type DdosCustomPolicyTriggerSensitivityOverride string
586
587const (
588	// Default ...
589	Default DdosCustomPolicyTriggerSensitivityOverride = "Default"
590	// High ...
591	High DdosCustomPolicyTriggerSensitivityOverride = "High"
592	// Low ...
593	Low DdosCustomPolicyTriggerSensitivityOverride = "Low"
594	// Relaxed ...
595	Relaxed DdosCustomPolicyTriggerSensitivityOverride = "Relaxed"
596)
597
598// PossibleDdosCustomPolicyTriggerSensitivityOverrideValues returns an array of possible values for the DdosCustomPolicyTriggerSensitivityOverride const type.
599func PossibleDdosCustomPolicyTriggerSensitivityOverrideValues() []DdosCustomPolicyTriggerSensitivityOverride {
600	return []DdosCustomPolicyTriggerSensitivityOverride{Default, High, Low, Relaxed}
601}
602
603// DdosSettingsProtectionCoverage enumerates the values for ddos settings protection coverage.
604type DdosSettingsProtectionCoverage string
605
606const (
607	// DdosSettingsProtectionCoverageBasic ...
608	DdosSettingsProtectionCoverageBasic DdosSettingsProtectionCoverage = "Basic"
609	// DdosSettingsProtectionCoverageStandard ...
610	DdosSettingsProtectionCoverageStandard DdosSettingsProtectionCoverage = "Standard"
611)
612
613// PossibleDdosSettingsProtectionCoverageValues returns an array of possible values for the DdosSettingsProtectionCoverage const type.
614func PossibleDdosSettingsProtectionCoverageValues() []DdosSettingsProtectionCoverage {
615	return []DdosSettingsProtectionCoverage{DdosSettingsProtectionCoverageBasic, DdosSettingsProtectionCoverageStandard}
616}
617
618// DhGroup enumerates the values for dh group.
619type DhGroup string
620
621const (
622	// DHGroup1 ...
623	DHGroup1 DhGroup = "DHGroup1"
624	// DHGroup14 ...
625	DHGroup14 DhGroup = "DHGroup14"
626	// DHGroup2 ...
627	DHGroup2 DhGroup = "DHGroup2"
628	// DHGroup2048 ...
629	DHGroup2048 DhGroup = "DHGroup2048"
630	// DHGroup24 ...
631	DHGroup24 DhGroup = "DHGroup24"
632	// ECP256 ...
633	ECP256 DhGroup = "ECP256"
634	// ECP384 ...
635	ECP384 DhGroup = "ECP384"
636	// None ...
637	None DhGroup = "None"
638)
639
640// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
641func PossibleDhGroupValues() []DhGroup {
642	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
643}
644
645// Direction enumerates the values for direction.
646type Direction string
647
648const (
649	// Inbound ...
650	Inbound Direction = "Inbound"
651	// Outbound ...
652	Outbound Direction = "Outbound"
653)
654
655// PossibleDirectionValues returns an array of possible values for the Direction const type.
656func PossibleDirectionValues() []Direction {
657	return []Direction{Inbound, Outbound}
658}
659
660// EffectiveRouteSource enumerates the values for effective route source.
661type EffectiveRouteSource string
662
663const (
664	// EffectiveRouteSourceDefault ...
665	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
666	// EffectiveRouteSourceUnknown ...
667	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
668	// EffectiveRouteSourceUser ...
669	EffectiveRouteSourceUser EffectiveRouteSource = "User"
670	// EffectiveRouteSourceVirtualNetworkGateway ...
671	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
672)
673
674// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
675func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
676	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
677}
678
679// EffectiveRouteState enumerates the values for effective route state.
680type EffectiveRouteState string
681
682const (
683	// Active ...
684	Active EffectiveRouteState = "Active"
685	// Invalid ...
686	Invalid EffectiveRouteState = "Invalid"
687)
688
689// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
690func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
691	return []EffectiveRouteState{Active, Invalid}
692}
693
694// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
695type EffectiveSecurityRuleProtocol string
696
697const (
698	// EffectiveSecurityRuleProtocolAll ...
699	EffectiveSecurityRuleProtocolAll EffectiveSecurityRuleProtocol = "All"
700	// EffectiveSecurityRuleProtocolTCP ...
701	EffectiveSecurityRuleProtocolTCP EffectiveSecurityRuleProtocol = "Tcp"
702	// EffectiveSecurityRuleProtocolUDP ...
703	EffectiveSecurityRuleProtocolUDP EffectiveSecurityRuleProtocol = "Udp"
704)
705
706// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
707func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
708	return []EffectiveSecurityRuleProtocol{EffectiveSecurityRuleProtocolAll, EffectiveSecurityRuleProtocolTCP, EffectiveSecurityRuleProtocolUDP}
709}
710
711// EvaluationState enumerates the values for evaluation state.
712type EvaluationState string
713
714const (
715	// Completed ...
716	Completed EvaluationState = "Completed"
717	// InProgress ...
718	InProgress EvaluationState = "InProgress"
719	// NotStarted ...
720	NotStarted EvaluationState = "NotStarted"
721)
722
723// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
724func PossibleEvaluationStateValues() []EvaluationState {
725	return []EvaluationState{Completed, InProgress, NotStarted}
726}
727
728// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
729// peering advertised public prefix state.
730type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
731
732const (
733	// Configured ...
734	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
735	// Configuring ...
736	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
737	// NotConfigured ...
738	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
739	// ValidationNeeded ...
740	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
741)
742
743// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
744func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
745	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
746}
747
748// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
749type ExpressRouteCircuitPeeringState string
750
751const (
752	// ExpressRouteCircuitPeeringStateDisabled ...
753	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
754	// ExpressRouteCircuitPeeringStateEnabled ...
755	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
756)
757
758// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
759func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
760	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
761}
762
763// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
764type ExpressRouteCircuitSkuFamily string
765
766const (
767	// MeteredData ...
768	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
769	// UnlimitedData ...
770	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
771)
772
773// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
774func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
775	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
776}
777
778// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
779type ExpressRouteCircuitSkuTier string
780
781const (
782	// ExpressRouteCircuitSkuTierBasic ...
783	ExpressRouteCircuitSkuTierBasic ExpressRouteCircuitSkuTier = "Basic"
784	// ExpressRouteCircuitSkuTierLocal ...
785	ExpressRouteCircuitSkuTierLocal ExpressRouteCircuitSkuTier = "Local"
786	// ExpressRouteCircuitSkuTierPremium ...
787	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
788	// ExpressRouteCircuitSkuTierStandard ...
789	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
790)
791
792// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
793func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
794	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierBasic, ExpressRouteCircuitSkuTierLocal, ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
795}
796
797// ExpressRouteLinkAdminState enumerates the values for express route link admin state.
798type ExpressRouteLinkAdminState string
799
800const (
801	// ExpressRouteLinkAdminStateDisabled ...
802	ExpressRouteLinkAdminStateDisabled ExpressRouteLinkAdminState = "Disabled"
803	// ExpressRouteLinkAdminStateEnabled ...
804	ExpressRouteLinkAdminStateEnabled ExpressRouteLinkAdminState = "Enabled"
805)
806
807// PossibleExpressRouteLinkAdminStateValues returns an array of possible values for the ExpressRouteLinkAdminState const type.
808func PossibleExpressRouteLinkAdminStateValues() []ExpressRouteLinkAdminState {
809	return []ExpressRouteLinkAdminState{ExpressRouteLinkAdminStateDisabled, ExpressRouteLinkAdminStateEnabled}
810}
811
812// ExpressRouteLinkConnectorType enumerates the values for express route link connector type.
813type ExpressRouteLinkConnectorType string
814
815const (
816	// LC ...
817	LC ExpressRouteLinkConnectorType = "LC"
818	// SC ...
819	SC ExpressRouteLinkConnectorType = "SC"
820)
821
822// PossibleExpressRouteLinkConnectorTypeValues returns an array of possible values for the ExpressRouteLinkConnectorType const type.
823func PossibleExpressRouteLinkConnectorTypeValues() []ExpressRouteLinkConnectorType {
824	return []ExpressRouteLinkConnectorType{LC, SC}
825}
826
827// ExpressRouteLinkMacSecCipher enumerates the values for express route link mac sec cipher.
828type ExpressRouteLinkMacSecCipher string
829
830const (
831	// GcmAes128 ...
832	GcmAes128 ExpressRouteLinkMacSecCipher = "gcm-aes-128"
833	// GcmAes256 ...
834	GcmAes256 ExpressRouteLinkMacSecCipher = "gcm-aes-256"
835)
836
837// PossibleExpressRouteLinkMacSecCipherValues returns an array of possible values for the ExpressRouteLinkMacSecCipher const type.
838func PossibleExpressRouteLinkMacSecCipherValues() []ExpressRouteLinkMacSecCipher {
839	return []ExpressRouteLinkMacSecCipher{GcmAes128, GcmAes256}
840}
841
842// ExpressRoutePeeringState enumerates the values for express route peering state.
843type ExpressRoutePeeringState string
844
845const (
846	// ExpressRoutePeeringStateDisabled ...
847	ExpressRoutePeeringStateDisabled ExpressRoutePeeringState = "Disabled"
848	// ExpressRoutePeeringStateEnabled ...
849	ExpressRoutePeeringStateEnabled ExpressRoutePeeringState = "Enabled"
850)
851
852// PossibleExpressRoutePeeringStateValues returns an array of possible values for the ExpressRoutePeeringState const type.
853func PossibleExpressRoutePeeringStateValues() []ExpressRoutePeeringState {
854	return []ExpressRoutePeeringState{ExpressRoutePeeringStateDisabled, ExpressRoutePeeringStateEnabled}
855}
856
857// ExpressRoutePeeringType enumerates the values for express route peering type.
858type ExpressRoutePeeringType string
859
860const (
861	// AzurePrivatePeering ...
862	AzurePrivatePeering ExpressRoutePeeringType = "AzurePrivatePeering"
863	// AzurePublicPeering ...
864	AzurePublicPeering ExpressRoutePeeringType = "AzurePublicPeering"
865	// MicrosoftPeering ...
866	MicrosoftPeering ExpressRoutePeeringType = "MicrosoftPeering"
867)
868
869// PossibleExpressRoutePeeringTypeValues returns an array of possible values for the ExpressRoutePeeringType const type.
870func PossibleExpressRoutePeeringTypeValues() []ExpressRoutePeeringType {
871	return []ExpressRoutePeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
872}
873
874// ExpressRoutePortsEncapsulation enumerates the values for express route ports encapsulation.
875type ExpressRoutePortsEncapsulation string
876
877const (
878	// Dot1Q ...
879	Dot1Q ExpressRoutePortsEncapsulation = "Dot1Q"
880	// QinQ ...
881	QinQ ExpressRoutePortsEncapsulation = "QinQ"
882)
883
884// PossibleExpressRoutePortsEncapsulationValues returns an array of possible values for the ExpressRoutePortsEncapsulation const type.
885func PossibleExpressRoutePortsEncapsulationValues() []ExpressRoutePortsEncapsulation {
886	return []ExpressRoutePortsEncapsulation{Dot1Q, QinQ}
887}
888
889// FirewallPolicyFilterRuleActionType enumerates the values for firewall policy filter rule action type.
890type FirewallPolicyFilterRuleActionType string
891
892const (
893	// FirewallPolicyFilterRuleActionTypeAlert ...
894	FirewallPolicyFilterRuleActionTypeAlert FirewallPolicyFilterRuleActionType = "Alert "
895	// FirewallPolicyFilterRuleActionTypeAllow ...
896	FirewallPolicyFilterRuleActionTypeAllow FirewallPolicyFilterRuleActionType = "Allow"
897	// FirewallPolicyFilterRuleActionTypeDeny ...
898	FirewallPolicyFilterRuleActionTypeDeny FirewallPolicyFilterRuleActionType = "Deny"
899)
900
901// PossibleFirewallPolicyFilterRuleActionTypeValues returns an array of possible values for the FirewallPolicyFilterRuleActionType const type.
902func PossibleFirewallPolicyFilterRuleActionTypeValues() []FirewallPolicyFilterRuleActionType {
903	return []FirewallPolicyFilterRuleActionType{FirewallPolicyFilterRuleActionTypeAlert, FirewallPolicyFilterRuleActionTypeAllow, FirewallPolicyFilterRuleActionTypeDeny}
904}
905
906// FirewallPolicyNatRuleActionType enumerates the values for firewall policy nat rule action type.
907type FirewallPolicyNatRuleActionType string
908
909const (
910	// DNAT ...
911	DNAT FirewallPolicyNatRuleActionType = "DNAT"
912	// SNAT ...
913	SNAT FirewallPolicyNatRuleActionType = "SNAT"
914)
915
916// PossibleFirewallPolicyNatRuleActionTypeValues returns an array of possible values for the FirewallPolicyNatRuleActionType const type.
917func PossibleFirewallPolicyNatRuleActionTypeValues() []FirewallPolicyNatRuleActionType {
918	return []FirewallPolicyNatRuleActionType{DNAT, SNAT}
919}
920
921// FirewallPolicyRuleConditionApplicationProtocolType enumerates the values for firewall policy rule condition
922// application protocol type.
923type FirewallPolicyRuleConditionApplicationProtocolType string
924
925const (
926	// FirewallPolicyRuleConditionApplicationProtocolTypeHTTP ...
927	FirewallPolicyRuleConditionApplicationProtocolTypeHTTP FirewallPolicyRuleConditionApplicationProtocolType = "Http"
928	// FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS ...
929	FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS FirewallPolicyRuleConditionApplicationProtocolType = "Https"
930)
931
932// PossibleFirewallPolicyRuleConditionApplicationProtocolTypeValues returns an array of possible values for the FirewallPolicyRuleConditionApplicationProtocolType const type.
933func PossibleFirewallPolicyRuleConditionApplicationProtocolTypeValues() []FirewallPolicyRuleConditionApplicationProtocolType {
934	return []FirewallPolicyRuleConditionApplicationProtocolType{FirewallPolicyRuleConditionApplicationProtocolTypeHTTP, FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS}
935}
936
937// FirewallPolicyRuleConditionNetworkProtocol enumerates the values for firewall policy rule condition network
938// protocol.
939type FirewallPolicyRuleConditionNetworkProtocol string
940
941const (
942	// FirewallPolicyRuleConditionNetworkProtocolAny ...
943	FirewallPolicyRuleConditionNetworkProtocolAny FirewallPolicyRuleConditionNetworkProtocol = "Any"
944	// FirewallPolicyRuleConditionNetworkProtocolICMP ...
945	FirewallPolicyRuleConditionNetworkProtocolICMP FirewallPolicyRuleConditionNetworkProtocol = "ICMP"
946	// FirewallPolicyRuleConditionNetworkProtocolTCP ...
947	FirewallPolicyRuleConditionNetworkProtocolTCP FirewallPolicyRuleConditionNetworkProtocol = "TCP"
948	// FirewallPolicyRuleConditionNetworkProtocolUDP ...
949	FirewallPolicyRuleConditionNetworkProtocolUDP FirewallPolicyRuleConditionNetworkProtocol = "UDP"
950)
951
952// PossibleFirewallPolicyRuleConditionNetworkProtocolValues returns an array of possible values for the FirewallPolicyRuleConditionNetworkProtocol const type.
953func PossibleFirewallPolicyRuleConditionNetworkProtocolValues() []FirewallPolicyRuleConditionNetworkProtocol {
954	return []FirewallPolicyRuleConditionNetworkProtocol{FirewallPolicyRuleConditionNetworkProtocolAny, FirewallPolicyRuleConditionNetworkProtocolICMP, FirewallPolicyRuleConditionNetworkProtocolTCP, FirewallPolicyRuleConditionNetworkProtocolUDP}
955}
956
957// FlowLogFormatType enumerates the values for flow log format type.
958type FlowLogFormatType string
959
960const (
961	// JSON ...
962	JSON FlowLogFormatType = "JSON"
963)
964
965// PossibleFlowLogFormatTypeValues returns an array of possible values for the FlowLogFormatType const type.
966func PossibleFlowLogFormatTypeValues() []FlowLogFormatType {
967	return []FlowLogFormatType{JSON}
968}
969
970// HTTPMethod enumerates the values for http method.
971type HTTPMethod string
972
973const (
974	// Get ...
975	Get HTTPMethod = "Get"
976)
977
978// PossibleHTTPMethodValues returns an array of possible values for the HTTPMethod const type.
979func PossibleHTTPMethodValues() []HTTPMethod {
980	return []HTTPMethod{Get}
981}
982
983// HubVirtualNetworkConnectionStatus enumerates the values for hub virtual network connection status.
984type HubVirtualNetworkConnectionStatus string
985
986const (
987	// HubVirtualNetworkConnectionStatusConnected ...
988	HubVirtualNetworkConnectionStatusConnected HubVirtualNetworkConnectionStatus = "Connected"
989	// HubVirtualNetworkConnectionStatusConnecting ...
990	HubVirtualNetworkConnectionStatusConnecting HubVirtualNetworkConnectionStatus = "Connecting"
991	// HubVirtualNetworkConnectionStatusNotConnected ...
992	HubVirtualNetworkConnectionStatusNotConnected HubVirtualNetworkConnectionStatus = "NotConnected"
993	// HubVirtualNetworkConnectionStatusUnknown ...
994	HubVirtualNetworkConnectionStatusUnknown HubVirtualNetworkConnectionStatus = "Unknown"
995)
996
997// PossibleHubVirtualNetworkConnectionStatusValues returns an array of possible values for the HubVirtualNetworkConnectionStatus const type.
998func PossibleHubVirtualNetworkConnectionStatusValues() []HubVirtualNetworkConnectionStatus {
999	return []HubVirtualNetworkConnectionStatus{HubVirtualNetworkConnectionStatusConnected, HubVirtualNetworkConnectionStatusConnecting, HubVirtualNetworkConnectionStatusNotConnected, HubVirtualNetworkConnectionStatusUnknown}
1000}
1001
1002// IkeEncryption enumerates the values for ike encryption.
1003type IkeEncryption string
1004
1005const (
1006	// AES128 ...
1007	AES128 IkeEncryption = "AES128"
1008	// AES192 ...
1009	AES192 IkeEncryption = "AES192"
1010	// AES256 ...
1011	AES256 IkeEncryption = "AES256"
1012	// DES ...
1013	DES IkeEncryption = "DES"
1014	// DES3 ...
1015	DES3 IkeEncryption = "DES3"
1016	// GCMAES128 ...
1017	GCMAES128 IkeEncryption = "GCMAES128"
1018	// GCMAES256 ...
1019	GCMAES256 IkeEncryption = "GCMAES256"
1020)
1021
1022// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
1023func PossibleIkeEncryptionValues() []IkeEncryption {
1024	return []IkeEncryption{AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256}
1025}
1026
1027// IkeIntegrity enumerates the values for ike integrity.
1028type IkeIntegrity string
1029
1030const (
1031	// IkeIntegrityGCMAES128 ...
1032	IkeIntegrityGCMAES128 IkeIntegrity = "GCMAES128"
1033	// IkeIntegrityGCMAES256 ...
1034	IkeIntegrityGCMAES256 IkeIntegrity = "GCMAES256"
1035	// IkeIntegrityMD5 ...
1036	IkeIntegrityMD5 IkeIntegrity = "MD5"
1037	// IkeIntegritySHA1 ...
1038	IkeIntegritySHA1 IkeIntegrity = "SHA1"
1039	// IkeIntegritySHA256 ...
1040	IkeIntegritySHA256 IkeIntegrity = "SHA256"
1041	// IkeIntegritySHA384 ...
1042	IkeIntegritySHA384 IkeIntegrity = "SHA384"
1043)
1044
1045// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
1046func PossibleIkeIntegrityValues() []IkeIntegrity {
1047	return []IkeIntegrity{IkeIntegrityGCMAES128, IkeIntegrityGCMAES256, IkeIntegrityMD5, IkeIntegritySHA1, IkeIntegritySHA256, IkeIntegritySHA384}
1048}
1049
1050// IPAllocationMethod enumerates the values for ip allocation method.
1051type IPAllocationMethod string
1052
1053const (
1054	// Dynamic ...
1055	Dynamic IPAllocationMethod = "Dynamic"
1056	// Static ...
1057	Static IPAllocationMethod = "Static"
1058)
1059
1060// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
1061func PossibleIPAllocationMethodValues() []IPAllocationMethod {
1062	return []IPAllocationMethod{Dynamic, Static}
1063}
1064
1065// IPFlowProtocol enumerates the values for ip flow protocol.
1066type IPFlowProtocol string
1067
1068const (
1069	// IPFlowProtocolTCP ...
1070	IPFlowProtocolTCP IPFlowProtocol = "TCP"
1071	// IPFlowProtocolUDP ...
1072	IPFlowProtocolUDP IPFlowProtocol = "UDP"
1073)
1074
1075// PossibleIPFlowProtocolValues returns an array of possible values for the IPFlowProtocol const type.
1076func PossibleIPFlowProtocolValues() []IPFlowProtocol {
1077	return []IPFlowProtocol{IPFlowProtocolTCP, IPFlowProtocolUDP}
1078}
1079
1080// IpsecEncryption enumerates the values for ipsec encryption.
1081type IpsecEncryption string
1082
1083const (
1084	// IpsecEncryptionAES128 ...
1085	IpsecEncryptionAES128 IpsecEncryption = "AES128"
1086	// IpsecEncryptionAES192 ...
1087	IpsecEncryptionAES192 IpsecEncryption = "AES192"
1088	// IpsecEncryptionAES256 ...
1089	IpsecEncryptionAES256 IpsecEncryption = "AES256"
1090	// IpsecEncryptionDES ...
1091	IpsecEncryptionDES IpsecEncryption = "DES"
1092	// IpsecEncryptionDES3 ...
1093	IpsecEncryptionDES3 IpsecEncryption = "DES3"
1094	// IpsecEncryptionGCMAES128 ...
1095	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
1096	// IpsecEncryptionGCMAES192 ...
1097	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
1098	// IpsecEncryptionGCMAES256 ...
1099	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
1100	// IpsecEncryptionNone ...
1101	IpsecEncryptionNone IpsecEncryption = "None"
1102)
1103
1104// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
1105func PossibleIpsecEncryptionValues() []IpsecEncryption {
1106	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
1107}
1108
1109// IpsecIntegrity enumerates the values for ipsec integrity.
1110type IpsecIntegrity string
1111
1112const (
1113	// IpsecIntegrityGCMAES128 ...
1114	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
1115	// IpsecIntegrityGCMAES192 ...
1116	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
1117	// IpsecIntegrityGCMAES256 ...
1118	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
1119	// IpsecIntegrityMD5 ...
1120	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
1121	// IpsecIntegritySHA1 ...
1122	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
1123	// IpsecIntegritySHA256 ...
1124	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
1125)
1126
1127// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
1128func PossibleIpsecIntegrityValues() []IpsecIntegrity {
1129	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
1130}
1131
1132// IPVersion enumerates the values for ip version.
1133type IPVersion string
1134
1135const (
1136	// IPv4 ...
1137	IPv4 IPVersion = "IPv4"
1138	// IPv6 ...
1139	IPv6 IPVersion = "IPv6"
1140)
1141
1142// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
1143func PossibleIPVersionValues() []IPVersion {
1144	return []IPVersion{IPv4, IPv6}
1145}
1146
1147// IssueType enumerates the values for issue type.
1148type IssueType string
1149
1150const (
1151	// IssueTypeAgentStopped ...
1152	IssueTypeAgentStopped IssueType = "AgentStopped"
1153	// IssueTypeDNSResolution ...
1154	IssueTypeDNSResolution IssueType = "DnsResolution"
1155	// IssueTypeGuestFirewall ...
1156	IssueTypeGuestFirewall IssueType = "GuestFirewall"
1157	// IssueTypeNetworkSecurityRule ...
1158	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
1159	// IssueTypePlatform ...
1160	IssueTypePlatform IssueType = "Platform"
1161	// IssueTypePortThrottled ...
1162	IssueTypePortThrottled IssueType = "PortThrottled"
1163	// IssueTypeSocketBind ...
1164	IssueTypeSocketBind IssueType = "SocketBind"
1165	// IssueTypeUnknown ...
1166	IssueTypeUnknown IssueType = "Unknown"
1167	// IssueTypeUserDefinedRoute ...
1168	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
1169)
1170
1171// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
1172func PossibleIssueTypeValues() []IssueType {
1173	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
1174}
1175
1176// LoadBalancerOutboundRuleProtocol enumerates the values for load balancer outbound rule protocol.
1177type LoadBalancerOutboundRuleProtocol string
1178
1179const (
1180	// LoadBalancerOutboundRuleProtocolAll ...
1181	LoadBalancerOutboundRuleProtocolAll LoadBalancerOutboundRuleProtocol = "All"
1182	// LoadBalancerOutboundRuleProtocolTCP ...
1183	LoadBalancerOutboundRuleProtocolTCP LoadBalancerOutboundRuleProtocol = "Tcp"
1184	// LoadBalancerOutboundRuleProtocolUDP ...
1185	LoadBalancerOutboundRuleProtocolUDP LoadBalancerOutboundRuleProtocol = "Udp"
1186)
1187
1188// PossibleLoadBalancerOutboundRuleProtocolValues returns an array of possible values for the LoadBalancerOutboundRuleProtocol const type.
1189func PossibleLoadBalancerOutboundRuleProtocolValues() []LoadBalancerOutboundRuleProtocol {
1190	return []LoadBalancerOutboundRuleProtocol{LoadBalancerOutboundRuleProtocolAll, LoadBalancerOutboundRuleProtocolTCP, LoadBalancerOutboundRuleProtocolUDP}
1191}
1192
1193// LoadBalancerSkuName enumerates the values for load balancer sku name.
1194type LoadBalancerSkuName string
1195
1196const (
1197	// LoadBalancerSkuNameBasic ...
1198	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
1199	// LoadBalancerSkuNameStandard ...
1200	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
1201)
1202
1203// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
1204func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
1205	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
1206}
1207
1208// LoadDistribution enumerates the values for load distribution.
1209type LoadDistribution string
1210
1211const (
1212	// LoadDistributionDefault ...
1213	LoadDistributionDefault LoadDistribution = "Default"
1214	// LoadDistributionSourceIP ...
1215	LoadDistributionSourceIP LoadDistribution = "SourceIP"
1216	// LoadDistributionSourceIPProtocol ...
1217	LoadDistributionSourceIPProtocol LoadDistribution = "SourceIPProtocol"
1218)
1219
1220// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
1221func PossibleLoadDistributionValues() []LoadDistribution {
1222	return []LoadDistribution{LoadDistributionDefault, LoadDistributionSourceIP, LoadDistributionSourceIPProtocol}
1223}
1224
1225// NatGatewaySkuName enumerates the values for nat gateway sku name.
1226type NatGatewaySkuName string
1227
1228const (
1229	// Standard ...
1230	Standard NatGatewaySkuName = "Standard"
1231)
1232
1233// PossibleNatGatewaySkuNameValues returns an array of possible values for the NatGatewaySkuName const type.
1234func PossibleNatGatewaySkuNameValues() []NatGatewaySkuName {
1235	return []NatGatewaySkuName{Standard}
1236}
1237
1238// NextHopType enumerates the values for next hop type.
1239type NextHopType string
1240
1241const (
1242	// NextHopTypeHyperNetGateway ...
1243	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
1244	// NextHopTypeInternet ...
1245	NextHopTypeInternet NextHopType = "Internet"
1246	// NextHopTypeNone ...
1247	NextHopTypeNone NextHopType = "None"
1248	// NextHopTypeVirtualAppliance ...
1249	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
1250	// NextHopTypeVirtualNetworkGateway ...
1251	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
1252	// NextHopTypeVnetLocal ...
1253	NextHopTypeVnetLocal NextHopType = "VnetLocal"
1254)
1255
1256// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
1257func PossibleNextHopTypeValues() []NextHopType {
1258	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
1259}
1260
1261// OfficeTrafficCategory enumerates the values for office traffic category.
1262type OfficeTrafficCategory string
1263
1264const (
1265	// OfficeTrafficCategoryAll ...
1266	OfficeTrafficCategoryAll OfficeTrafficCategory = "All"
1267	// OfficeTrafficCategoryNone ...
1268	OfficeTrafficCategoryNone OfficeTrafficCategory = "None"
1269	// OfficeTrafficCategoryOptimize ...
1270	OfficeTrafficCategoryOptimize OfficeTrafficCategory = "Optimize"
1271	// OfficeTrafficCategoryOptimizeAndAllow ...
1272	OfficeTrafficCategoryOptimizeAndAllow OfficeTrafficCategory = "OptimizeAndAllow"
1273)
1274
1275// PossibleOfficeTrafficCategoryValues returns an array of possible values for the OfficeTrafficCategory const type.
1276func PossibleOfficeTrafficCategoryValues() []OfficeTrafficCategory {
1277	return []OfficeTrafficCategory{OfficeTrafficCategoryAll, OfficeTrafficCategoryNone, OfficeTrafficCategoryOptimize, OfficeTrafficCategoryOptimizeAndAllow}
1278}
1279
1280// OperationStatus enumerates the values for operation status.
1281type OperationStatus string
1282
1283const (
1284	// OperationStatusFailed ...
1285	OperationStatusFailed OperationStatus = "Failed"
1286	// OperationStatusInProgress ...
1287	OperationStatusInProgress OperationStatus = "InProgress"
1288	// OperationStatusSucceeded ...
1289	OperationStatusSucceeded OperationStatus = "Succeeded"
1290)
1291
1292// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
1293func PossibleOperationStatusValues() []OperationStatus {
1294	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
1295}
1296
1297// Origin enumerates the values for origin.
1298type Origin string
1299
1300const (
1301	// OriginInbound ...
1302	OriginInbound Origin = "Inbound"
1303	// OriginLocal ...
1304	OriginLocal Origin = "Local"
1305	// OriginOutbound ...
1306	OriginOutbound Origin = "Outbound"
1307)
1308
1309// PossibleOriginValues returns an array of possible values for the Origin const type.
1310func PossibleOriginValues() []Origin {
1311	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
1312}
1313
1314// PcError enumerates the values for pc error.
1315type PcError string
1316
1317const (
1318	// AgentStopped ...
1319	AgentStopped PcError = "AgentStopped"
1320	// CaptureFailed ...
1321	CaptureFailed PcError = "CaptureFailed"
1322	// InternalError ...
1323	InternalError PcError = "InternalError"
1324	// LocalFileFailed ...
1325	LocalFileFailed PcError = "LocalFileFailed"
1326	// StorageFailed ...
1327	StorageFailed PcError = "StorageFailed"
1328)
1329
1330// PossiblePcErrorValues returns an array of possible values for the PcError const type.
1331func PossiblePcErrorValues() []PcError {
1332	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
1333}
1334
1335// PcProtocol enumerates the values for pc protocol.
1336type PcProtocol string
1337
1338const (
1339	// PcProtocolAny ...
1340	PcProtocolAny PcProtocol = "Any"
1341	// PcProtocolTCP ...
1342	PcProtocolTCP PcProtocol = "TCP"
1343	// PcProtocolUDP ...
1344	PcProtocolUDP PcProtocol = "UDP"
1345)
1346
1347// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
1348func PossiblePcProtocolValues() []PcProtocol {
1349	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
1350}
1351
1352// PcStatus enumerates the values for pc status.
1353type PcStatus string
1354
1355const (
1356	// PcStatusError ...
1357	PcStatusError PcStatus = "Error"
1358	// PcStatusNotStarted ...
1359	PcStatusNotStarted PcStatus = "NotStarted"
1360	// PcStatusRunning ...
1361	PcStatusRunning PcStatus = "Running"
1362	// PcStatusStopped ...
1363	PcStatusStopped PcStatus = "Stopped"
1364	// PcStatusUnknown ...
1365	PcStatusUnknown PcStatus = "Unknown"
1366)
1367
1368// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
1369func PossiblePcStatusValues() []PcStatus {
1370	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
1371}
1372
1373// PfsGroup enumerates the values for pfs group.
1374type PfsGroup string
1375
1376const (
1377	// PfsGroupECP256 ...
1378	PfsGroupECP256 PfsGroup = "ECP256"
1379	// PfsGroupECP384 ...
1380	PfsGroupECP384 PfsGroup = "ECP384"
1381	// PfsGroupNone ...
1382	PfsGroupNone PfsGroup = "None"
1383	// PfsGroupPFS1 ...
1384	PfsGroupPFS1 PfsGroup = "PFS1"
1385	// PfsGroupPFS14 ...
1386	PfsGroupPFS14 PfsGroup = "PFS14"
1387	// PfsGroupPFS2 ...
1388	PfsGroupPFS2 PfsGroup = "PFS2"
1389	// PfsGroupPFS2048 ...
1390	PfsGroupPFS2048 PfsGroup = "PFS2048"
1391	// PfsGroupPFS24 ...
1392	PfsGroupPFS24 PfsGroup = "PFS24"
1393	// PfsGroupPFSMM ...
1394	PfsGroupPFSMM PfsGroup = "PFSMM"
1395)
1396
1397// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
1398func PossiblePfsGroupValues() []PfsGroup {
1399	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS14, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24, PfsGroupPFSMM}
1400}
1401
1402// ProbeProtocol enumerates the values for probe protocol.
1403type ProbeProtocol string
1404
1405const (
1406	// ProbeProtocolHTTP ...
1407	ProbeProtocolHTTP ProbeProtocol = "Http"
1408	// ProbeProtocolHTTPS ...
1409	ProbeProtocolHTTPS ProbeProtocol = "Https"
1410	// ProbeProtocolTCP ...
1411	ProbeProtocolTCP ProbeProtocol = "Tcp"
1412)
1413
1414// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
1415func PossibleProbeProtocolValues() []ProbeProtocol {
1416	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolHTTPS, ProbeProtocolTCP}
1417}
1418
1419// ProcessorArchitecture enumerates the values for processor architecture.
1420type ProcessorArchitecture string
1421
1422const (
1423	// Amd64 ...
1424	Amd64 ProcessorArchitecture = "Amd64"
1425	// X86 ...
1426	X86 ProcessorArchitecture = "X86"
1427)
1428
1429// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
1430func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
1431	return []ProcessorArchitecture{Amd64, X86}
1432}
1433
1434// Protocol enumerates the values for protocol.
1435type Protocol string
1436
1437const (
1438	// ProtocolHTTP ...
1439	ProtocolHTTP Protocol = "Http"
1440	// ProtocolHTTPS ...
1441	ProtocolHTTPS Protocol = "Https"
1442	// ProtocolIcmp ...
1443	ProtocolIcmp Protocol = "Icmp"
1444	// ProtocolTCP ...
1445	ProtocolTCP Protocol = "Tcp"
1446)
1447
1448// PossibleProtocolValues returns an array of possible values for the Protocol const type.
1449func PossibleProtocolValues() []Protocol {
1450	return []Protocol{ProtocolHTTP, ProtocolHTTPS, ProtocolIcmp, ProtocolTCP}
1451}
1452
1453// ProvisioningState enumerates the values for provisioning state.
1454type ProvisioningState string
1455
1456const (
1457	// Deleting ...
1458	Deleting ProvisioningState = "Deleting"
1459	// Failed ...
1460	Failed ProvisioningState = "Failed"
1461	// Succeeded ...
1462	Succeeded ProvisioningState = "Succeeded"
1463	// Updating ...
1464	Updating ProvisioningState = "Updating"
1465)
1466
1467// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
1468func PossibleProvisioningStateValues() []ProvisioningState {
1469	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
1470}
1471
1472// PublicIPAddressSkuName enumerates the values for public ip address sku name.
1473type PublicIPAddressSkuName string
1474
1475const (
1476	// PublicIPAddressSkuNameBasic ...
1477	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
1478	// PublicIPAddressSkuNameStandard ...
1479	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1480)
1481
1482// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1483func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1484	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1485}
1486
1487// PublicIPPrefixSkuName enumerates the values for public ip prefix sku name.
1488type PublicIPPrefixSkuName string
1489
1490const (
1491	// PublicIPPrefixSkuNameStandard ...
1492	PublicIPPrefixSkuNameStandard PublicIPPrefixSkuName = "Standard"
1493)
1494
1495// PossiblePublicIPPrefixSkuNameValues returns an array of possible values for the PublicIPPrefixSkuName const type.
1496func PossiblePublicIPPrefixSkuNameValues() []PublicIPPrefixSkuName {
1497	return []PublicIPPrefixSkuName{PublicIPPrefixSkuNameStandard}
1498}
1499
1500// ResourceIdentityType enumerates the values for resource identity type.
1501type ResourceIdentityType string
1502
1503const (
1504	// ResourceIdentityTypeNone ...
1505	ResourceIdentityTypeNone ResourceIdentityType = "None"
1506	// ResourceIdentityTypeSystemAssigned ...
1507	ResourceIdentityTypeSystemAssigned ResourceIdentityType = "SystemAssigned"
1508	// ResourceIdentityTypeSystemAssignedUserAssigned ...
1509	ResourceIdentityTypeSystemAssignedUserAssigned ResourceIdentityType = "SystemAssigned, UserAssigned"
1510	// ResourceIdentityTypeUserAssigned ...
1511	ResourceIdentityTypeUserAssigned ResourceIdentityType = "UserAssigned"
1512)
1513
1514// PossibleResourceIdentityTypeValues returns an array of possible values for the ResourceIdentityType const type.
1515func PossibleResourceIdentityTypeValues() []ResourceIdentityType {
1516	return []ResourceIdentityType{ResourceIdentityTypeNone, ResourceIdentityTypeSystemAssigned, ResourceIdentityTypeSystemAssignedUserAssigned, ResourceIdentityTypeUserAssigned}
1517}
1518
1519// RouteNextHopType enumerates the values for route next hop type.
1520type RouteNextHopType string
1521
1522const (
1523	// RouteNextHopTypeInternet ...
1524	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1525	// RouteNextHopTypeNone ...
1526	RouteNextHopTypeNone RouteNextHopType = "None"
1527	// RouteNextHopTypeVirtualAppliance ...
1528	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1529	// RouteNextHopTypeVirtualNetworkGateway ...
1530	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1531	// RouteNextHopTypeVnetLocal ...
1532	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1533)
1534
1535// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1536func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1537	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1538}
1539
1540// RuleConditionType enumerates the values for rule condition type.
1541type RuleConditionType string
1542
1543const (
1544	// RuleConditionTypeApplicationRuleCondition ...
1545	RuleConditionTypeApplicationRuleCondition RuleConditionType = "ApplicationRuleCondition"
1546	// RuleConditionTypeFirewallPolicyRuleCondition ...
1547	RuleConditionTypeFirewallPolicyRuleCondition RuleConditionType = "FirewallPolicyRuleCondition"
1548	// RuleConditionTypeNetworkRuleCondition ...
1549	RuleConditionTypeNetworkRuleCondition RuleConditionType = "NetworkRuleCondition"
1550)
1551
1552// PossibleRuleConditionTypeValues returns an array of possible values for the RuleConditionType const type.
1553func PossibleRuleConditionTypeValues() []RuleConditionType {
1554	return []RuleConditionType{RuleConditionTypeApplicationRuleCondition, RuleConditionTypeFirewallPolicyRuleCondition, RuleConditionTypeNetworkRuleCondition}
1555}
1556
1557// RuleType enumerates the values for rule type.
1558type RuleType string
1559
1560const (
1561	// RuleTypeFirewallPolicyFilterRule ...
1562	RuleTypeFirewallPolicyFilterRule RuleType = "FirewallPolicyFilterRule"
1563	// RuleTypeFirewallPolicyNatRule ...
1564	RuleTypeFirewallPolicyNatRule RuleType = "FirewallPolicyNatRule"
1565	// RuleTypeFirewallPolicyRule ...
1566	RuleTypeFirewallPolicyRule RuleType = "FirewallPolicyRule"
1567)
1568
1569// PossibleRuleTypeValues returns an array of possible values for the RuleType const type.
1570func PossibleRuleTypeValues() []RuleType {
1571	return []RuleType{RuleTypeFirewallPolicyFilterRule, RuleTypeFirewallPolicyNatRule, RuleTypeFirewallPolicyRule}
1572}
1573
1574// SecurityRuleAccess enumerates the values for security rule access.
1575type SecurityRuleAccess string
1576
1577const (
1578	// SecurityRuleAccessAllow ...
1579	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1580	// SecurityRuleAccessDeny ...
1581	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1582)
1583
1584// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1585func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1586	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1587}
1588
1589// SecurityRuleDirection enumerates the values for security rule direction.
1590type SecurityRuleDirection string
1591
1592const (
1593	// SecurityRuleDirectionInbound ...
1594	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1595	// SecurityRuleDirectionOutbound ...
1596	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1597)
1598
1599// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1600func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1601	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1602}
1603
1604// SecurityRuleProtocol enumerates the values for security rule protocol.
1605type SecurityRuleProtocol string
1606
1607const (
1608	// SecurityRuleProtocolAsterisk ...
1609	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1610	// SecurityRuleProtocolEsp ...
1611	SecurityRuleProtocolEsp SecurityRuleProtocol = "Esp"
1612	// SecurityRuleProtocolIcmp ...
1613	SecurityRuleProtocolIcmp SecurityRuleProtocol = "Icmp"
1614	// SecurityRuleProtocolTCP ...
1615	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1616	// SecurityRuleProtocolUDP ...
1617	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1618)
1619
1620// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1621func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1622	return []SecurityRuleProtocol{SecurityRuleProtocolAsterisk, SecurityRuleProtocolEsp, SecurityRuleProtocolIcmp, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1623}
1624
1625// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1626type ServiceProviderProvisioningState string
1627
1628const (
1629	// Deprovisioning ...
1630	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1631	// NotProvisioned ...
1632	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1633	// Provisioned ...
1634	Provisioned ServiceProviderProvisioningState = "Provisioned"
1635	// Provisioning ...
1636	Provisioning ServiceProviderProvisioningState = "Provisioning"
1637)
1638
1639// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1640func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1641	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1642}
1643
1644// Severity enumerates the values for severity.
1645type Severity string
1646
1647const (
1648	// SeverityError ...
1649	SeverityError Severity = "Error"
1650	// SeverityWarning ...
1651	SeverityWarning Severity = "Warning"
1652)
1653
1654// PossibleSeverityValues returns an array of possible values for the Severity const type.
1655func PossibleSeverityValues() []Severity {
1656	return []Severity{SeverityError, SeverityWarning}
1657}
1658
1659// TransportProtocol enumerates the values for transport protocol.
1660type TransportProtocol string
1661
1662const (
1663	// TransportProtocolAll ...
1664	TransportProtocolAll TransportProtocol = "All"
1665	// TransportProtocolTCP ...
1666	TransportProtocolTCP TransportProtocol = "Tcp"
1667	// TransportProtocolUDP ...
1668	TransportProtocolUDP TransportProtocol = "Udp"
1669)
1670
1671// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1672func PossibleTransportProtocolValues() []TransportProtocol {
1673	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1674}
1675
1676// TunnelConnectionStatus enumerates the values for tunnel connection status.
1677type TunnelConnectionStatus string
1678
1679const (
1680	// TunnelConnectionStatusConnected ...
1681	TunnelConnectionStatusConnected TunnelConnectionStatus = "Connected"
1682	// TunnelConnectionStatusConnecting ...
1683	TunnelConnectionStatusConnecting TunnelConnectionStatus = "Connecting"
1684	// TunnelConnectionStatusNotConnected ...
1685	TunnelConnectionStatusNotConnected TunnelConnectionStatus = "NotConnected"
1686	// TunnelConnectionStatusUnknown ...
1687	TunnelConnectionStatusUnknown TunnelConnectionStatus = "Unknown"
1688)
1689
1690// PossibleTunnelConnectionStatusValues returns an array of possible values for the TunnelConnectionStatus const type.
1691func PossibleTunnelConnectionStatusValues() []TunnelConnectionStatus {
1692	return []TunnelConnectionStatus{TunnelConnectionStatusConnected, TunnelConnectionStatusConnecting, TunnelConnectionStatusNotConnected, TunnelConnectionStatusUnknown}
1693}
1694
1695// VerbosityLevel enumerates the values for verbosity level.
1696type VerbosityLevel string
1697
1698const (
1699	// Full ...
1700	Full VerbosityLevel = "Full"
1701	// Minimum ...
1702	Minimum VerbosityLevel = "Minimum"
1703	// Normal ...
1704	Normal VerbosityLevel = "Normal"
1705)
1706
1707// PossibleVerbosityLevelValues returns an array of possible values for the VerbosityLevel const type.
1708func PossibleVerbosityLevelValues() []VerbosityLevel {
1709	return []VerbosityLevel{Full, Minimum, Normal}
1710}
1711
1712// VirtualNetworkGatewayConnectionProtocol enumerates the values for virtual network gateway connection
1713// protocol.
1714type VirtualNetworkGatewayConnectionProtocol string
1715
1716const (
1717	// IKEv1 ...
1718	IKEv1 VirtualNetworkGatewayConnectionProtocol = "IKEv1"
1719	// IKEv2 ...
1720	IKEv2 VirtualNetworkGatewayConnectionProtocol = "IKEv2"
1721)
1722
1723// PossibleVirtualNetworkGatewayConnectionProtocolValues returns an array of possible values for the VirtualNetworkGatewayConnectionProtocol const type.
1724func PossibleVirtualNetworkGatewayConnectionProtocolValues() []VirtualNetworkGatewayConnectionProtocol {
1725	return []VirtualNetworkGatewayConnectionProtocol{IKEv1, IKEv2}
1726}
1727
1728// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1729type VirtualNetworkGatewayConnectionStatus string
1730
1731const (
1732	// VirtualNetworkGatewayConnectionStatusConnected ...
1733	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1734	// VirtualNetworkGatewayConnectionStatusConnecting ...
1735	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1736	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1737	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1738	// VirtualNetworkGatewayConnectionStatusUnknown ...
1739	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1740)
1741
1742// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1743func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1744	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1745}
1746
1747// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1748type VirtualNetworkGatewayConnectionType string
1749
1750const (
1751	// ExpressRoute ...
1752	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1753	// IPsec ...
1754	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1755	// Vnet2Vnet ...
1756	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1757	// VPNClient ...
1758	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1759)
1760
1761// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1762func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1763	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1764}
1765
1766// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1767type VirtualNetworkGatewaySkuName string
1768
1769const (
1770	// VirtualNetworkGatewaySkuNameBasic ...
1771	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1772	// VirtualNetworkGatewaySkuNameErGw1AZ ...
1773	VirtualNetworkGatewaySkuNameErGw1AZ VirtualNetworkGatewaySkuName = "ErGw1AZ"
1774	// VirtualNetworkGatewaySkuNameErGw2AZ ...
1775	VirtualNetworkGatewaySkuNameErGw2AZ VirtualNetworkGatewaySkuName = "ErGw2AZ"
1776	// VirtualNetworkGatewaySkuNameErGw3AZ ...
1777	VirtualNetworkGatewaySkuNameErGw3AZ VirtualNetworkGatewaySkuName = "ErGw3AZ"
1778	// VirtualNetworkGatewaySkuNameHighPerformance ...
1779	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1780	// VirtualNetworkGatewaySkuNameStandard ...
1781	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1782	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1783	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1784	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1785	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1786	// VirtualNetworkGatewaySkuNameVpnGw1AZ ...
1787	VirtualNetworkGatewaySkuNameVpnGw1AZ VirtualNetworkGatewaySkuName = "VpnGw1AZ"
1788	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1789	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1790	// VirtualNetworkGatewaySkuNameVpnGw2AZ ...
1791	VirtualNetworkGatewaySkuNameVpnGw2AZ VirtualNetworkGatewaySkuName = "VpnGw2AZ"
1792	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1793	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1794	// VirtualNetworkGatewaySkuNameVpnGw3AZ ...
1795	VirtualNetworkGatewaySkuNameVpnGw3AZ VirtualNetworkGatewaySkuName = "VpnGw3AZ"
1796	// VirtualNetworkGatewaySkuNameVpnGw4 ...
1797	VirtualNetworkGatewaySkuNameVpnGw4 VirtualNetworkGatewaySkuName = "VpnGw4"
1798	// VirtualNetworkGatewaySkuNameVpnGw4AZ ...
1799	VirtualNetworkGatewaySkuNameVpnGw4AZ VirtualNetworkGatewaySkuName = "VpnGw4AZ"
1800	// VirtualNetworkGatewaySkuNameVpnGw5 ...
1801	VirtualNetworkGatewaySkuNameVpnGw5 VirtualNetworkGatewaySkuName = "VpnGw5"
1802	// VirtualNetworkGatewaySkuNameVpnGw5AZ ...
1803	VirtualNetworkGatewaySkuNameVpnGw5AZ VirtualNetworkGatewaySkuName = "VpnGw5AZ"
1804)
1805
1806// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1807func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1808	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameErGw1AZ, VirtualNetworkGatewaySkuNameErGw2AZ, VirtualNetworkGatewaySkuNameErGw3AZ, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw1AZ, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw2AZ, VirtualNetworkGatewaySkuNameVpnGw3, VirtualNetworkGatewaySkuNameVpnGw3AZ, VirtualNetworkGatewaySkuNameVpnGw4, VirtualNetworkGatewaySkuNameVpnGw4AZ, VirtualNetworkGatewaySkuNameVpnGw5, VirtualNetworkGatewaySkuNameVpnGw5AZ}
1809}
1810
1811// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1812type VirtualNetworkGatewaySkuTier string
1813
1814const (
1815	// VirtualNetworkGatewaySkuTierBasic ...
1816	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1817	// VirtualNetworkGatewaySkuTierErGw1AZ ...
1818	VirtualNetworkGatewaySkuTierErGw1AZ VirtualNetworkGatewaySkuTier = "ErGw1AZ"
1819	// VirtualNetworkGatewaySkuTierErGw2AZ ...
1820	VirtualNetworkGatewaySkuTierErGw2AZ VirtualNetworkGatewaySkuTier = "ErGw2AZ"
1821	// VirtualNetworkGatewaySkuTierErGw3AZ ...
1822	VirtualNetworkGatewaySkuTierErGw3AZ VirtualNetworkGatewaySkuTier = "ErGw3AZ"
1823	// VirtualNetworkGatewaySkuTierHighPerformance ...
1824	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1825	// VirtualNetworkGatewaySkuTierStandard ...
1826	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1827	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1828	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1829	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1830	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1831	// VirtualNetworkGatewaySkuTierVpnGw1AZ ...
1832	VirtualNetworkGatewaySkuTierVpnGw1AZ VirtualNetworkGatewaySkuTier = "VpnGw1AZ"
1833	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1834	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1835	// VirtualNetworkGatewaySkuTierVpnGw2AZ ...
1836	VirtualNetworkGatewaySkuTierVpnGw2AZ VirtualNetworkGatewaySkuTier = "VpnGw2AZ"
1837	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1838	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1839	// VirtualNetworkGatewaySkuTierVpnGw3AZ ...
1840	VirtualNetworkGatewaySkuTierVpnGw3AZ VirtualNetworkGatewaySkuTier = "VpnGw3AZ"
1841	// VirtualNetworkGatewaySkuTierVpnGw4 ...
1842	VirtualNetworkGatewaySkuTierVpnGw4 VirtualNetworkGatewaySkuTier = "VpnGw4"
1843	// VirtualNetworkGatewaySkuTierVpnGw4AZ ...
1844	VirtualNetworkGatewaySkuTierVpnGw4AZ VirtualNetworkGatewaySkuTier = "VpnGw4AZ"
1845	// VirtualNetworkGatewaySkuTierVpnGw5 ...
1846	VirtualNetworkGatewaySkuTierVpnGw5 VirtualNetworkGatewaySkuTier = "VpnGw5"
1847	// VirtualNetworkGatewaySkuTierVpnGw5AZ ...
1848	VirtualNetworkGatewaySkuTierVpnGw5AZ VirtualNetworkGatewaySkuTier = "VpnGw5AZ"
1849)
1850
1851// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1852func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1853	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierErGw1AZ, VirtualNetworkGatewaySkuTierErGw2AZ, VirtualNetworkGatewaySkuTierErGw3AZ, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw1AZ, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw2AZ, VirtualNetworkGatewaySkuTierVpnGw3, VirtualNetworkGatewaySkuTierVpnGw3AZ, VirtualNetworkGatewaySkuTierVpnGw4, VirtualNetworkGatewaySkuTierVpnGw4AZ, VirtualNetworkGatewaySkuTierVpnGw5, VirtualNetworkGatewaySkuTierVpnGw5AZ}
1854}
1855
1856// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1857type VirtualNetworkGatewayType string
1858
1859const (
1860	// VirtualNetworkGatewayTypeExpressRoute ...
1861	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1862	// VirtualNetworkGatewayTypeVpn ...
1863	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1864)
1865
1866// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1867func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1868	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1869}
1870
1871// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1872type VirtualNetworkPeeringState string
1873
1874const (
1875	// VirtualNetworkPeeringStateConnected ...
1876	VirtualNetworkPeeringStateConnected VirtualNetworkPeeringState = "Connected"
1877	// VirtualNetworkPeeringStateDisconnected ...
1878	VirtualNetworkPeeringStateDisconnected VirtualNetworkPeeringState = "Disconnected"
1879	// VirtualNetworkPeeringStateInitiated ...
1880	VirtualNetworkPeeringStateInitiated VirtualNetworkPeeringState = "Initiated"
1881)
1882
1883// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1884func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1885	return []VirtualNetworkPeeringState{VirtualNetworkPeeringStateConnected, VirtualNetworkPeeringStateDisconnected, VirtualNetworkPeeringStateInitiated}
1886}
1887
1888// VirtualWanSecurityProviderType enumerates the values for virtual wan security provider type.
1889type VirtualWanSecurityProviderType string
1890
1891const (
1892	// External ...
1893	External VirtualWanSecurityProviderType = "External"
1894	// Native ...
1895	Native VirtualWanSecurityProviderType = "Native"
1896)
1897
1898// PossibleVirtualWanSecurityProviderTypeValues returns an array of possible values for the VirtualWanSecurityProviderType const type.
1899func PossibleVirtualWanSecurityProviderTypeValues() []VirtualWanSecurityProviderType {
1900	return []VirtualWanSecurityProviderType{External, Native}
1901}
1902
1903// VpnClientProtocol enumerates the values for vpn client protocol.
1904type VpnClientProtocol string
1905
1906const (
1907	// IkeV2 ...
1908	IkeV2 VpnClientProtocol = "IkeV2"
1909	// OpenVPN ...
1910	OpenVPN VpnClientProtocol = "OpenVPN"
1911	// SSTP ...
1912	SSTP VpnClientProtocol = "SSTP"
1913)
1914
1915// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
1916func PossibleVpnClientProtocolValues() []VpnClientProtocol {
1917	return []VpnClientProtocol{IkeV2, OpenVPN, SSTP}
1918}
1919
1920// VpnConnectionStatus enumerates the values for vpn connection status.
1921type VpnConnectionStatus string
1922
1923const (
1924	// VpnConnectionStatusConnected ...
1925	VpnConnectionStatusConnected VpnConnectionStatus = "Connected"
1926	// VpnConnectionStatusConnecting ...
1927	VpnConnectionStatusConnecting VpnConnectionStatus = "Connecting"
1928	// VpnConnectionStatusNotConnected ...
1929	VpnConnectionStatusNotConnected VpnConnectionStatus = "NotConnected"
1930	// VpnConnectionStatusUnknown ...
1931	VpnConnectionStatusUnknown VpnConnectionStatus = "Unknown"
1932)
1933
1934// PossibleVpnConnectionStatusValues returns an array of possible values for the VpnConnectionStatus const type.
1935func PossibleVpnConnectionStatusValues() []VpnConnectionStatus {
1936	return []VpnConnectionStatus{VpnConnectionStatusConnected, VpnConnectionStatusConnecting, VpnConnectionStatusNotConnected, VpnConnectionStatusUnknown}
1937}
1938
1939// VpnGatewayGeneration enumerates the values for vpn gateway generation.
1940type VpnGatewayGeneration string
1941
1942const (
1943	// VpnGatewayGenerationGeneration1 ...
1944	VpnGatewayGenerationGeneration1 VpnGatewayGeneration = "Generation1"
1945	// VpnGatewayGenerationGeneration2 ...
1946	VpnGatewayGenerationGeneration2 VpnGatewayGeneration = "Generation2"
1947	// VpnGatewayGenerationNone ...
1948	VpnGatewayGenerationNone VpnGatewayGeneration = "None"
1949)
1950
1951// PossibleVpnGatewayGenerationValues returns an array of possible values for the VpnGatewayGeneration const type.
1952func PossibleVpnGatewayGenerationValues() []VpnGatewayGeneration {
1953	return []VpnGatewayGeneration{VpnGatewayGenerationGeneration1, VpnGatewayGenerationGeneration2, VpnGatewayGenerationNone}
1954}
1955
1956// VpnGatewayTunnelingProtocol enumerates the values for vpn gateway tunneling protocol.
1957type VpnGatewayTunnelingProtocol string
1958
1959const (
1960	// VpnGatewayTunnelingProtocolIkeV2 ...
1961	VpnGatewayTunnelingProtocolIkeV2 VpnGatewayTunnelingProtocol = "IkeV2"
1962	// VpnGatewayTunnelingProtocolOpenVPN ...
1963	VpnGatewayTunnelingProtocolOpenVPN VpnGatewayTunnelingProtocol = "OpenVPN"
1964)
1965
1966// PossibleVpnGatewayTunnelingProtocolValues returns an array of possible values for the VpnGatewayTunnelingProtocol const type.
1967func PossibleVpnGatewayTunnelingProtocolValues() []VpnGatewayTunnelingProtocol {
1968	return []VpnGatewayTunnelingProtocol{VpnGatewayTunnelingProtocolIkeV2, VpnGatewayTunnelingProtocolOpenVPN}
1969}
1970
1971// VpnType enumerates the values for vpn type.
1972type VpnType string
1973
1974const (
1975	// PolicyBased ...
1976	PolicyBased VpnType = "PolicyBased"
1977	// RouteBased ...
1978	RouteBased VpnType = "RouteBased"
1979)
1980
1981// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
1982func PossibleVpnTypeValues() []VpnType {
1983	return []VpnType{PolicyBased, RouteBased}
1984}
1985
1986// WebApplicationFirewallAction enumerates the values for web application firewall action.
1987type WebApplicationFirewallAction string
1988
1989const (
1990	// WebApplicationFirewallActionAllow ...
1991	WebApplicationFirewallActionAllow WebApplicationFirewallAction = "Allow"
1992	// WebApplicationFirewallActionBlock ...
1993	WebApplicationFirewallActionBlock WebApplicationFirewallAction = "Block"
1994	// WebApplicationFirewallActionLog ...
1995	WebApplicationFirewallActionLog WebApplicationFirewallAction = "Log"
1996)
1997
1998// PossibleWebApplicationFirewallActionValues returns an array of possible values for the WebApplicationFirewallAction const type.
1999func PossibleWebApplicationFirewallActionValues() []WebApplicationFirewallAction {
2000	return []WebApplicationFirewallAction{WebApplicationFirewallActionAllow, WebApplicationFirewallActionBlock, WebApplicationFirewallActionLog}
2001}
2002
2003// WebApplicationFirewallEnabledState enumerates the values for web application firewall enabled state.
2004type WebApplicationFirewallEnabledState string
2005
2006const (
2007	// WebApplicationFirewallEnabledStateDisabled ...
2008	WebApplicationFirewallEnabledStateDisabled WebApplicationFirewallEnabledState = "Disabled"
2009	// WebApplicationFirewallEnabledStateEnabled ...
2010	WebApplicationFirewallEnabledStateEnabled WebApplicationFirewallEnabledState = "Enabled"
2011)
2012
2013// PossibleWebApplicationFirewallEnabledStateValues returns an array of possible values for the WebApplicationFirewallEnabledState const type.
2014func PossibleWebApplicationFirewallEnabledStateValues() []WebApplicationFirewallEnabledState {
2015	return []WebApplicationFirewallEnabledState{WebApplicationFirewallEnabledStateDisabled, WebApplicationFirewallEnabledStateEnabled}
2016}
2017
2018// WebApplicationFirewallMatchVariable enumerates the values for web application firewall match variable.
2019type WebApplicationFirewallMatchVariable string
2020
2021const (
2022	// PostArgs ...
2023	PostArgs WebApplicationFirewallMatchVariable = "PostArgs"
2024	// QueryString ...
2025	QueryString WebApplicationFirewallMatchVariable = "QueryString"
2026	// RemoteAddr ...
2027	RemoteAddr WebApplicationFirewallMatchVariable = "RemoteAddr"
2028	// RequestBody ...
2029	RequestBody WebApplicationFirewallMatchVariable = "RequestBody"
2030	// RequestCookies ...
2031	RequestCookies WebApplicationFirewallMatchVariable = "RequestCookies"
2032	// RequestHeaders ...
2033	RequestHeaders WebApplicationFirewallMatchVariable = "RequestHeaders"
2034	// RequestMethod ...
2035	RequestMethod WebApplicationFirewallMatchVariable = "RequestMethod"
2036	// RequestURI ...
2037	RequestURI WebApplicationFirewallMatchVariable = "RequestUri"
2038)
2039
2040// PossibleWebApplicationFirewallMatchVariableValues returns an array of possible values for the WebApplicationFirewallMatchVariable const type.
2041func PossibleWebApplicationFirewallMatchVariableValues() []WebApplicationFirewallMatchVariable {
2042	return []WebApplicationFirewallMatchVariable{PostArgs, QueryString, RemoteAddr, RequestBody, RequestCookies, RequestHeaders, RequestMethod, RequestURI}
2043}
2044
2045// WebApplicationFirewallMode enumerates the values for web application firewall mode.
2046type WebApplicationFirewallMode string
2047
2048const (
2049	// WebApplicationFirewallModeDetection ...
2050	WebApplicationFirewallModeDetection WebApplicationFirewallMode = "Detection"
2051	// WebApplicationFirewallModePrevention ...
2052	WebApplicationFirewallModePrevention WebApplicationFirewallMode = "Prevention"
2053)
2054
2055// PossibleWebApplicationFirewallModeValues returns an array of possible values for the WebApplicationFirewallMode const type.
2056func PossibleWebApplicationFirewallModeValues() []WebApplicationFirewallMode {
2057	return []WebApplicationFirewallMode{WebApplicationFirewallModeDetection, WebApplicationFirewallModePrevention}
2058}
2059
2060// WebApplicationFirewallOperator enumerates the values for web application firewall operator.
2061type WebApplicationFirewallOperator string
2062
2063const (
2064	// WebApplicationFirewallOperatorBeginsWith ...
2065	WebApplicationFirewallOperatorBeginsWith WebApplicationFirewallOperator = "BeginsWith"
2066	// WebApplicationFirewallOperatorContains ...
2067	WebApplicationFirewallOperatorContains WebApplicationFirewallOperator = "Contains"
2068	// WebApplicationFirewallOperatorEndsWith ...
2069	WebApplicationFirewallOperatorEndsWith WebApplicationFirewallOperator = "EndsWith"
2070	// WebApplicationFirewallOperatorEqual ...
2071	WebApplicationFirewallOperatorEqual WebApplicationFirewallOperator = "Equal"
2072	// WebApplicationFirewallOperatorGreaterThan ...
2073	WebApplicationFirewallOperatorGreaterThan WebApplicationFirewallOperator = "GreaterThan"
2074	// WebApplicationFirewallOperatorGreaterThanOrEqual ...
2075	WebApplicationFirewallOperatorGreaterThanOrEqual WebApplicationFirewallOperator = "GreaterThanOrEqual"
2076	// WebApplicationFirewallOperatorIPMatch ...
2077	WebApplicationFirewallOperatorIPMatch WebApplicationFirewallOperator = "IPMatch"
2078	// WebApplicationFirewallOperatorLessThan ...
2079	WebApplicationFirewallOperatorLessThan WebApplicationFirewallOperator = "LessThan"
2080	// WebApplicationFirewallOperatorLessThanOrEqual ...
2081	WebApplicationFirewallOperatorLessThanOrEqual WebApplicationFirewallOperator = "LessThanOrEqual"
2082	// WebApplicationFirewallOperatorRegex ...
2083	WebApplicationFirewallOperatorRegex WebApplicationFirewallOperator = "Regex"
2084)
2085
2086// PossibleWebApplicationFirewallOperatorValues returns an array of possible values for the WebApplicationFirewallOperator const type.
2087func PossibleWebApplicationFirewallOperatorValues() []WebApplicationFirewallOperator {
2088	return []WebApplicationFirewallOperator{WebApplicationFirewallOperatorBeginsWith, WebApplicationFirewallOperatorContains, WebApplicationFirewallOperatorEndsWith, WebApplicationFirewallOperatorEqual, WebApplicationFirewallOperatorGreaterThan, WebApplicationFirewallOperatorGreaterThanOrEqual, WebApplicationFirewallOperatorIPMatch, WebApplicationFirewallOperatorLessThan, WebApplicationFirewallOperatorLessThanOrEqual, WebApplicationFirewallOperatorRegex}
2089}
2090
2091// WebApplicationFirewallPolicyResourceState enumerates the values for web application firewall policy resource
2092// state.
2093type WebApplicationFirewallPolicyResourceState string
2094
2095const (
2096	// WebApplicationFirewallPolicyResourceStateCreating ...
2097	WebApplicationFirewallPolicyResourceStateCreating WebApplicationFirewallPolicyResourceState = "Creating"
2098	// WebApplicationFirewallPolicyResourceStateDeleting ...
2099	WebApplicationFirewallPolicyResourceStateDeleting WebApplicationFirewallPolicyResourceState = "Deleting"
2100	// WebApplicationFirewallPolicyResourceStateDisabled ...
2101	WebApplicationFirewallPolicyResourceStateDisabled WebApplicationFirewallPolicyResourceState = "Disabled"
2102	// WebApplicationFirewallPolicyResourceStateDisabling ...
2103	WebApplicationFirewallPolicyResourceStateDisabling WebApplicationFirewallPolicyResourceState = "Disabling"
2104	// WebApplicationFirewallPolicyResourceStateEnabled ...
2105	WebApplicationFirewallPolicyResourceStateEnabled WebApplicationFirewallPolicyResourceState = "Enabled"
2106	// WebApplicationFirewallPolicyResourceStateEnabling ...
2107	WebApplicationFirewallPolicyResourceStateEnabling WebApplicationFirewallPolicyResourceState = "Enabling"
2108)
2109
2110// PossibleWebApplicationFirewallPolicyResourceStateValues returns an array of possible values for the WebApplicationFirewallPolicyResourceState const type.
2111func PossibleWebApplicationFirewallPolicyResourceStateValues() []WebApplicationFirewallPolicyResourceState {
2112	return []WebApplicationFirewallPolicyResourceState{WebApplicationFirewallPolicyResourceStateCreating, WebApplicationFirewallPolicyResourceStateDeleting, WebApplicationFirewallPolicyResourceStateDisabled, WebApplicationFirewallPolicyResourceStateDisabling, WebApplicationFirewallPolicyResourceStateEnabled, WebApplicationFirewallPolicyResourceStateEnabling}
2113}
2114
2115// WebApplicationFirewallRuleType enumerates the values for web application firewall rule type.
2116type WebApplicationFirewallRuleType string
2117
2118const (
2119	// WebApplicationFirewallRuleTypeInvalid ...
2120	WebApplicationFirewallRuleTypeInvalid WebApplicationFirewallRuleType = "Invalid"
2121	// WebApplicationFirewallRuleTypeMatchRule ...
2122	WebApplicationFirewallRuleTypeMatchRule WebApplicationFirewallRuleType = "MatchRule"
2123)
2124
2125// PossibleWebApplicationFirewallRuleTypeValues returns an array of possible values for the WebApplicationFirewallRuleType const type.
2126func PossibleWebApplicationFirewallRuleTypeValues() []WebApplicationFirewallRuleType {
2127	return []WebApplicationFirewallRuleType{WebApplicationFirewallRuleTypeInvalid, WebApplicationFirewallRuleTypeMatchRule}
2128}
2129
2130// WebApplicationFirewallTransform enumerates the values for web application firewall transform.
2131type WebApplicationFirewallTransform string
2132
2133const (
2134	// HTMLEntityDecode ...
2135	HTMLEntityDecode WebApplicationFirewallTransform = "HtmlEntityDecode"
2136	// Lowercase ...
2137	Lowercase WebApplicationFirewallTransform = "Lowercase"
2138	// RemoveNulls ...
2139	RemoveNulls WebApplicationFirewallTransform = "RemoveNulls"
2140	// Trim ...
2141	Trim WebApplicationFirewallTransform = "Trim"
2142	// URLDecode ...
2143	URLDecode WebApplicationFirewallTransform = "UrlDecode"
2144	// URLEncode ...
2145	URLEncode WebApplicationFirewallTransform = "UrlEncode"
2146)
2147
2148// PossibleWebApplicationFirewallTransformValues returns an array of possible values for the WebApplicationFirewallTransform const type.
2149func PossibleWebApplicationFirewallTransformValues() []WebApplicationFirewallTransform {
2150	return []WebApplicationFirewallTransform{HTMLEntityDecode, Lowercase, RemoveNulls, Trim, URLDecode, URLEncode}
2151}
2152
2153// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
2154// virtual network.
2155type AddressSpace struct {
2156	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
2157	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
2158}
2159
2160// ApplicationGateway application gateway resource.
2161type ApplicationGateway struct {
2162	autorest.Response `json:"-"`
2163	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
2164	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
2165	// Etag - A unique read-only string that changes whenever the resource is updated.
2166	Etag *string `json:"etag,omitempty"`
2167	// Zones - A list of availability zones denoting where the resource needs to come from.
2168	Zones *[]string `json:"zones,omitempty"`
2169	// Identity - The identity of the application gateway, if configured.
2170	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
2171	// ID - Resource ID.
2172	ID *string `json:"id,omitempty"`
2173	// Name - READ-ONLY; Resource name.
2174	Name *string `json:"name,omitempty"`
2175	// Type - READ-ONLY; Resource type.
2176	Type *string `json:"type,omitempty"`
2177	// Location - Resource location.
2178	Location *string `json:"location,omitempty"`
2179	// Tags - Resource tags.
2180	Tags map[string]*string `json:"tags"`
2181}
2182
2183// MarshalJSON is the custom marshaler for ApplicationGateway.
2184func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
2185	objectMap := make(map[string]interface{})
2186	if ag.ApplicationGatewayPropertiesFormat != nil {
2187		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
2188	}
2189	if ag.Etag != nil {
2190		objectMap["etag"] = ag.Etag
2191	}
2192	if ag.Zones != nil {
2193		objectMap["zones"] = ag.Zones
2194	}
2195	if ag.Identity != nil {
2196		objectMap["identity"] = ag.Identity
2197	}
2198	if ag.ID != nil {
2199		objectMap["id"] = ag.ID
2200	}
2201	if ag.Location != nil {
2202		objectMap["location"] = ag.Location
2203	}
2204	if ag.Tags != nil {
2205		objectMap["tags"] = ag.Tags
2206	}
2207	return json.Marshal(objectMap)
2208}
2209
2210// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
2211func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
2212	var m map[string]*json.RawMessage
2213	err := json.Unmarshal(body, &m)
2214	if err != nil {
2215		return err
2216	}
2217	for k, v := range m {
2218		switch k {
2219		case "properties":
2220			if v != nil {
2221				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
2222				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
2223				if err != nil {
2224					return err
2225				}
2226				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
2227			}
2228		case "etag":
2229			if v != nil {
2230				var etag string
2231				err = json.Unmarshal(*v, &etag)
2232				if err != nil {
2233					return err
2234				}
2235				ag.Etag = &etag
2236			}
2237		case "zones":
2238			if v != nil {
2239				var zones []string
2240				err = json.Unmarshal(*v, &zones)
2241				if err != nil {
2242					return err
2243				}
2244				ag.Zones = &zones
2245			}
2246		case "identity":
2247			if v != nil {
2248				var identity ManagedServiceIdentity
2249				err = json.Unmarshal(*v, &identity)
2250				if err != nil {
2251					return err
2252				}
2253				ag.Identity = &identity
2254			}
2255		case "id":
2256			if v != nil {
2257				var ID string
2258				err = json.Unmarshal(*v, &ID)
2259				if err != nil {
2260					return err
2261				}
2262				ag.ID = &ID
2263			}
2264		case "name":
2265			if v != nil {
2266				var name string
2267				err = json.Unmarshal(*v, &name)
2268				if err != nil {
2269					return err
2270				}
2271				ag.Name = &name
2272			}
2273		case "type":
2274			if v != nil {
2275				var typeVar string
2276				err = json.Unmarshal(*v, &typeVar)
2277				if err != nil {
2278					return err
2279				}
2280				ag.Type = &typeVar
2281			}
2282		case "location":
2283			if v != nil {
2284				var location string
2285				err = json.Unmarshal(*v, &location)
2286				if err != nil {
2287					return err
2288				}
2289				ag.Location = &location
2290			}
2291		case "tags":
2292			if v != nil {
2293				var tags map[string]*string
2294				err = json.Unmarshal(*v, &tags)
2295				if err != nil {
2296					return err
2297				}
2298				ag.Tags = tags
2299			}
2300		}
2301	}
2302
2303	return nil
2304}
2305
2306// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
2307type ApplicationGatewayAuthenticationCertificate struct {
2308	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
2309	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
2310	// Name - Name of the authentication certificate that is unique within an Application Gateway.
2311	Name *string `json:"name,omitempty"`
2312	// Etag - A unique read-only string that changes whenever the resource is updated.
2313	Etag *string `json:"etag,omitempty"`
2314	// Type - Type of the resource.
2315	Type *string `json:"type,omitempty"`
2316	// ID - Resource ID.
2317	ID *string `json:"id,omitempty"`
2318}
2319
2320// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
2321func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
2322	objectMap := make(map[string]interface{})
2323	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
2324		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
2325	}
2326	if agac.Name != nil {
2327		objectMap["name"] = agac.Name
2328	}
2329	if agac.Etag != nil {
2330		objectMap["etag"] = agac.Etag
2331	}
2332	if agac.Type != nil {
2333		objectMap["type"] = agac.Type
2334	}
2335	if agac.ID != nil {
2336		objectMap["id"] = agac.ID
2337	}
2338	return json.Marshal(objectMap)
2339}
2340
2341// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
2342func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
2343	var m map[string]*json.RawMessage
2344	err := json.Unmarshal(body, &m)
2345	if err != nil {
2346		return err
2347	}
2348	for k, v := range m {
2349		switch k {
2350		case "properties":
2351			if v != nil {
2352				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
2353				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
2354				if err != nil {
2355					return err
2356				}
2357				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
2358			}
2359		case "name":
2360			if v != nil {
2361				var name string
2362				err = json.Unmarshal(*v, &name)
2363				if err != nil {
2364					return err
2365				}
2366				agac.Name = &name
2367			}
2368		case "etag":
2369			if v != nil {
2370				var etag string
2371				err = json.Unmarshal(*v, &etag)
2372				if err != nil {
2373					return err
2374				}
2375				agac.Etag = &etag
2376			}
2377		case "type":
2378			if v != nil {
2379				var typeVar string
2380				err = json.Unmarshal(*v, &typeVar)
2381				if err != nil {
2382					return err
2383				}
2384				agac.Type = &typeVar
2385			}
2386		case "id":
2387			if v != nil {
2388				var ID string
2389				err = json.Unmarshal(*v, &ID)
2390				if err != nil {
2391					return err
2392				}
2393				agac.ID = &ID
2394			}
2395		}
2396	}
2397
2398	return nil
2399}
2400
2401// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
2402// application gateway.
2403type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
2404	// Data - Certificate public data.
2405	Data *string `json:"data,omitempty"`
2406	// ProvisioningState - The provisioning state of the authentication certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2407	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2408}
2409
2410// ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
2411type ApplicationGatewayAutoscaleConfiguration struct {
2412	// MinCapacity - Lower bound on number of Application Gateway capacity.
2413	MinCapacity *int32 `json:"minCapacity,omitempty"`
2414	// MaxCapacity - Upper bound on number of Application Gateway capacity.
2415	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
2416}
2417
2418// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
2419// call.
2420type ApplicationGatewayAvailableSslOptions struct {
2421	autorest.Response `json:"-"`
2422	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
2423	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
2424	// ID - Resource ID.
2425	ID *string `json:"id,omitempty"`
2426	// Name - READ-ONLY; Resource name.
2427	Name *string `json:"name,omitempty"`
2428	// Type - READ-ONLY; Resource type.
2429	Type *string `json:"type,omitempty"`
2430	// Location - Resource location.
2431	Location *string `json:"location,omitempty"`
2432	// Tags - Resource tags.
2433	Tags map[string]*string `json:"tags"`
2434}
2435
2436// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
2437func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
2438	objectMap := make(map[string]interface{})
2439	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
2440		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
2441	}
2442	if agaso.ID != nil {
2443		objectMap["id"] = agaso.ID
2444	}
2445	if agaso.Location != nil {
2446		objectMap["location"] = agaso.Location
2447	}
2448	if agaso.Tags != nil {
2449		objectMap["tags"] = agaso.Tags
2450	}
2451	return json.Marshal(objectMap)
2452}
2453
2454// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
2455func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
2456	var m map[string]*json.RawMessage
2457	err := json.Unmarshal(body, &m)
2458	if err != nil {
2459		return err
2460	}
2461	for k, v := range m {
2462		switch k {
2463		case "properties":
2464			if v != nil {
2465				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
2466				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
2467				if err != nil {
2468					return err
2469				}
2470				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
2471			}
2472		case "id":
2473			if v != nil {
2474				var ID string
2475				err = json.Unmarshal(*v, &ID)
2476				if err != nil {
2477					return err
2478				}
2479				agaso.ID = &ID
2480			}
2481		case "name":
2482			if v != nil {
2483				var name string
2484				err = json.Unmarshal(*v, &name)
2485				if err != nil {
2486					return err
2487				}
2488				agaso.Name = &name
2489			}
2490		case "type":
2491			if v != nil {
2492				var typeVar string
2493				err = json.Unmarshal(*v, &typeVar)
2494				if err != nil {
2495					return err
2496				}
2497				agaso.Type = &typeVar
2498			}
2499		case "location":
2500			if v != nil {
2501				var location string
2502				err = json.Unmarshal(*v, &location)
2503				if err != nil {
2504					return err
2505				}
2506				agaso.Location = &location
2507			}
2508		case "tags":
2509			if v != nil {
2510				var tags map[string]*string
2511				err = json.Unmarshal(*v, &tags)
2512				if err != nil {
2513					return err
2514				}
2515				agaso.Tags = tags
2516			}
2517		}
2518	}
2519
2520	return nil
2521}
2522
2523// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
2524// ApplicationGatewayAvailableSslOptions.
2525type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
2526	// PredefinedPolicies - List of available Ssl predefined policy.
2527	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
2528	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
2529	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
2530	// AvailableCipherSuites - List of available Ssl cipher suites.
2531	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
2532	// AvailableProtocols - List of available Ssl protocols.
2533	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
2534}
2535
2536// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
2537// service call.
2538type ApplicationGatewayAvailableSslPredefinedPolicies struct {
2539	autorest.Response `json:"-"`
2540	// Value - List of available Ssl predefined policy.
2541	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
2542	// NextLink - URL to get the next set of results.
2543	NextLink *string `json:"nextLink,omitempty"`
2544}
2545
2546// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
2547// ApplicationGatewaySslPredefinedPolicy values.
2548type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
2549	i    int
2550	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
2551}
2552
2553// NextWithContext advances to the next value.  If there was an error making
2554// the request the iterator does not advance and the error is returned.
2555func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
2556	if tracing.IsEnabled() {
2557		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
2558		defer func() {
2559			sc := -1
2560			if iter.Response().Response.Response != nil {
2561				sc = iter.Response().Response.Response.StatusCode
2562			}
2563			tracing.EndSpan(ctx, sc, err)
2564		}()
2565	}
2566	iter.i++
2567	if iter.i < len(iter.page.Values()) {
2568		return nil
2569	}
2570	err = iter.page.NextWithContext(ctx)
2571	if err != nil {
2572		iter.i--
2573		return err
2574	}
2575	iter.i = 0
2576	return nil
2577}
2578
2579// Next advances to the next value.  If there was an error making
2580// the request the iterator does not advance and the error is returned.
2581// Deprecated: Use NextWithContext() instead.
2582func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
2583	return iter.NextWithContext(context.Background())
2584}
2585
2586// NotDone returns true if the enumeration should be started or is not yet complete.
2587func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
2588	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2589}
2590
2591// Response returns the raw server response from the last page request.
2592func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2593	return iter.page.Response()
2594}
2595
2596// Value returns the current value or a zero-initialized value if the
2597// iterator has advanced beyond the end of the collection.
2598func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
2599	if !iter.page.NotDone() {
2600		return ApplicationGatewaySslPredefinedPolicy{}
2601	}
2602	return iter.page.Values()[iter.i]
2603}
2604
2605// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
2606func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
2607	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
2608}
2609
2610// IsEmpty returns true if the ListResult contains no values.
2611func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
2612	return agaspp.Value == nil || len(*agaspp.Value) == 0
2613}
2614
2615// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
2616// It returns nil if no more results exist.
2617func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
2618	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
2619		return nil, nil
2620	}
2621	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2622		autorest.AsJSON(),
2623		autorest.AsGet(),
2624		autorest.WithBaseURL(to.String(agaspp.NextLink)))
2625}
2626
2627// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
2628// ApplicationGatewaySslPredefinedPolicy values.
2629type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
2630	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
2631	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
2632}
2633
2634// NextWithContext advances to the next page of values.  If there was an error making
2635// the request the page does not advance and the error is returned.
2636func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
2637	if tracing.IsEnabled() {
2638		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
2639		defer func() {
2640			sc := -1
2641			if page.Response().Response.Response != nil {
2642				sc = page.Response().Response.Response.StatusCode
2643			}
2644			tracing.EndSpan(ctx, sc, err)
2645		}()
2646	}
2647	next, err := page.fn(ctx, page.agaspp)
2648	if err != nil {
2649		return err
2650	}
2651	page.agaspp = next
2652	return nil
2653}
2654
2655// Next advances to the next page of values.  If there was an error making
2656// the request the page does not advance and the error is returned.
2657// Deprecated: Use NextWithContext() instead.
2658func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
2659	return page.NextWithContext(context.Background())
2660}
2661
2662// NotDone returns true if the page enumeration should be started or is not yet complete.
2663func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
2664	return !page.agaspp.IsEmpty()
2665}
2666
2667// Response returns the raw server response from the last page request.
2668func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
2669	return page.agaspp
2670}
2671
2672// Values returns the slice of values for the current page or nil if there are no values.
2673func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
2674	if page.agaspp.IsEmpty() {
2675		return nil
2676	}
2677	return *page.agaspp.Value
2678}
2679
2680// Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
2681func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
2682	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{fn: getNextPage}
2683}
2684
2685// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
2686// service call.
2687type ApplicationGatewayAvailableWafRuleSetsResult struct {
2688	autorest.Response `json:"-"`
2689	// Value - The list of application gateway rule sets.
2690	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
2691}
2692
2693// ApplicationGatewayBackendAddress backend address of an application gateway.
2694type ApplicationGatewayBackendAddress struct {
2695	// Fqdn - Fully qualified domain name (FQDN).
2696	Fqdn *string `json:"fqdn,omitempty"`
2697	// IPAddress - IP address.
2698	IPAddress *string `json:"ipAddress,omitempty"`
2699}
2700
2701// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
2702type ApplicationGatewayBackendAddressPool struct {
2703	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
2704	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
2705	// Name - Name of the backend address pool that is unique within an Application Gateway.
2706	Name *string `json:"name,omitempty"`
2707	// Etag - A unique read-only string that changes whenever the resource is updated.
2708	Etag *string `json:"etag,omitempty"`
2709	// Type - Type of the resource.
2710	Type *string `json:"type,omitempty"`
2711	// ID - Resource ID.
2712	ID *string `json:"id,omitempty"`
2713}
2714
2715// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
2716func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
2717	objectMap := make(map[string]interface{})
2718	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
2719		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
2720	}
2721	if agbap.Name != nil {
2722		objectMap["name"] = agbap.Name
2723	}
2724	if agbap.Etag != nil {
2725		objectMap["etag"] = agbap.Etag
2726	}
2727	if agbap.Type != nil {
2728		objectMap["type"] = agbap.Type
2729	}
2730	if agbap.ID != nil {
2731		objectMap["id"] = agbap.ID
2732	}
2733	return json.Marshal(objectMap)
2734}
2735
2736// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
2737func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
2738	var m map[string]*json.RawMessage
2739	err := json.Unmarshal(body, &m)
2740	if err != nil {
2741		return err
2742	}
2743	for k, v := range m {
2744		switch k {
2745		case "properties":
2746			if v != nil {
2747				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
2748				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
2749				if err != nil {
2750					return err
2751				}
2752				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
2753			}
2754		case "name":
2755			if v != nil {
2756				var name string
2757				err = json.Unmarshal(*v, &name)
2758				if err != nil {
2759					return err
2760				}
2761				agbap.Name = &name
2762			}
2763		case "etag":
2764			if v != nil {
2765				var etag string
2766				err = json.Unmarshal(*v, &etag)
2767				if err != nil {
2768					return err
2769				}
2770				agbap.Etag = &etag
2771			}
2772		case "type":
2773			if v != nil {
2774				var typeVar string
2775				err = json.Unmarshal(*v, &typeVar)
2776				if err != nil {
2777					return err
2778				}
2779				agbap.Type = &typeVar
2780			}
2781		case "id":
2782			if v != nil {
2783				var ID string
2784				err = json.Unmarshal(*v, &ID)
2785				if err != nil {
2786					return err
2787				}
2788				agbap.ID = &ID
2789			}
2790		}
2791	}
2792
2793	return nil
2794}
2795
2796// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
2797// application gateway.
2798type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
2799	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
2800	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
2801	// BackendAddresses - Backend addresses.
2802	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
2803	// ProvisioningState - The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2804	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2805}
2806
2807// ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
2808type ApplicationGatewayBackendHealth struct {
2809	autorest.Response `json:"-"`
2810	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
2811	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
2812}
2813
2814// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
2815type ApplicationGatewayBackendHealthHTTPSettings struct {
2816	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
2817	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
2818	// Servers - List of ApplicationGatewayBackendHealthServer resources.
2819	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
2820}
2821
2822// ApplicationGatewayBackendHealthOnDemand result of on demand test probe.
2823type ApplicationGatewayBackendHealthOnDemand struct {
2824	autorest.Response `json:"-"`
2825	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2826	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2827	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
2828	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
2829}
2830
2831// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
2832type ApplicationGatewayBackendHealthPool struct {
2833	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
2834	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
2835	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
2836	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2837}
2838
2839// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
2840type ApplicationGatewayBackendHealthServer struct {
2841	// Address - IP address or FQDN of backend server.
2842	Address *string `json:"address,omitempty"`
2843	// IPConfiguration - Reference of IP configuration of backend server.
2844	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
2845	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
2846	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
2847	// HealthProbeLog - Health Probe Log.
2848	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
2849}
2850
2851// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
2852type ApplicationGatewayBackendHTTPSettings struct {
2853	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
2854	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
2855	// Name - Name of the backend http settings that is unique within an Application Gateway.
2856	Name *string `json:"name,omitempty"`
2857	// Etag - A unique read-only string that changes whenever the resource is updated.
2858	Etag *string `json:"etag,omitempty"`
2859	// Type - Type of the resource.
2860	Type *string `json:"type,omitempty"`
2861	// ID - Resource ID.
2862	ID *string `json:"id,omitempty"`
2863}
2864
2865// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
2866func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
2867	objectMap := make(map[string]interface{})
2868	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
2869		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2870	}
2871	if agbhs.Name != nil {
2872		objectMap["name"] = agbhs.Name
2873	}
2874	if agbhs.Etag != nil {
2875		objectMap["etag"] = agbhs.Etag
2876	}
2877	if agbhs.Type != nil {
2878		objectMap["type"] = agbhs.Type
2879	}
2880	if agbhs.ID != nil {
2881		objectMap["id"] = agbhs.ID
2882	}
2883	return json.Marshal(objectMap)
2884}
2885
2886// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
2887func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
2888	var m map[string]*json.RawMessage
2889	err := json.Unmarshal(body, &m)
2890	if err != nil {
2891		return err
2892	}
2893	for k, v := range m {
2894		switch k {
2895		case "properties":
2896			if v != nil {
2897				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
2898				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
2899				if err != nil {
2900					return err
2901				}
2902				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
2903			}
2904		case "name":
2905			if v != nil {
2906				var name string
2907				err = json.Unmarshal(*v, &name)
2908				if err != nil {
2909					return err
2910				}
2911				agbhs.Name = &name
2912			}
2913		case "etag":
2914			if v != nil {
2915				var etag string
2916				err = json.Unmarshal(*v, &etag)
2917				if err != nil {
2918					return err
2919				}
2920				agbhs.Etag = &etag
2921			}
2922		case "type":
2923			if v != nil {
2924				var typeVar string
2925				err = json.Unmarshal(*v, &typeVar)
2926				if err != nil {
2927					return err
2928				}
2929				agbhs.Type = &typeVar
2930			}
2931		case "id":
2932			if v != nil {
2933				var ID string
2934				err = json.Unmarshal(*v, &ID)
2935				if err != nil {
2936					return err
2937				}
2938				agbhs.ID = &ID
2939			}
2940		}
2941	}
2942
2943	return nil
2944}
2945
2946// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
2947// application gateway.
2948type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
2949	// Port - The destination port on the backend.
2950	Port *int32 `json:"port,omitempty"`
2951	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
2952	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2953	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
2954	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
2955	// 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.
2956	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
2957	// Probe - Probe resource of an application gateway.
2958	Probe *SubResource `json:"probe,omitempty"`
2959	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
2960	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
2961	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
2962	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
2963	// ConnectionDraining - Connection draining of the backend http settings resource.
2964	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
2965	// HostName - Host header to be sent to the backend servers.
2966	HostName *string `json:"hostName,omitempty"`
2967	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
2968	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
2969	// AffinityCookieName - Cookie name to use for the affinity cookie.
2970	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
2971	// ProbeEnabled - Whether the probe is enabled. Default value is false.
2972	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
2973	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
2974	Path *string `json:"path,omitempty"`
2975	// ProvisioningState - The provisioning state of the backend HTTP settings resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
2976	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
2977}
2978
2979// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
2980// be active for a specified time after the backend server got removed from the configuration.
2981type ApplicationGatewayConnectionDraining struct {
2982	// Enabled - Whether connection draining is enabled or not.
2983	Enabled *bool `json:"enabled,omitempty"`
2984	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
2985	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
2986}
2987
2988// ApplicationGatewayCustomError customer error of an application gateway.
2989type ApplicationGatewayCustomError struct {
2990	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
2991	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
2992	// CustomErrorPageURL - Error page URL of the application gateway customer error.
2993	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
2994}
2995
2996// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
2997// rule group.
2998type ApplicationGatewayFirewallDisabledRuleGroup struct {
2999	// RuleGroupName - The name of the rule group that will be disabled.
3000	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3001	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
3002	Rules *[]int32 `json:"rules,omitempty"`
3003}
3004
3005// ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
3006// check.
3007type ApplicationGatewayFirewallExclusion struct {
3008	// MatchVariable - The variable to be excluded.
3009	MatchVariable *string `json:"matchVariable,omitempty"`
3010	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
3011	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
3012	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
3013	Selector *string `json:"selector,omitempty"`
3014}
3015
3016// ApplicationGatewayFirewallRule a web application firewall rule.
3017type ApplicationGatewayFirewallRule struct {
3018	// RuleID - The identifier of the web application firewall rule.
3019	RuleID *int32 `json:"ruleId,omitempty"`
3020	// Description - The description of the web application firewall rule.
3021	Description *string `json:"description,omitempty"`
3022}
3023
3024// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
3025type ApplicationGatewayFirewallRuleGroup struct {
3026	// RuleGroupName - The name of the web application firewall rule group.
3027	RuleGroupName *string `json:"ruleGroupName,omitempty"`
3028	// Description - The description of the web application firewall rule group.
3029	Description *string `json:"description,omitempty"`
3030	// Rules - The rules of the web application firewall rule group.
3031	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
3032}
3033
3034// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
3035type ApplicationGatewayFirewallRuleSet struct {
3036	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
3037	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
3038	// ID - Resource ID.
3039	ID *string `json:"id,omitempty"`
3040	// Name - READ-ONLY; Resource name.
3041	Name *string `json:"name,omitempty"`
3042	// Type - READ-ONLY; Resource type.
3043	Type *string `json:"type,omitempty"`
3044	// Location - Resource location.
3045	Location *string `json:"location,omitempty"`
3046	// Tags - Resource tags.
3047	Tags map[string]*string `json:"tags"`
3048}
3049
3050// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
3051func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
3052	objectMap := make(map[string]interface{})
3053	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
3054		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
3055	}
3056	if agfrs.ID != nil {
3057		objectMap["id"] = agfrs.ID
3058	}
3059	if agfrs.Location != nil {
3060		objectMap["location"] = agfrs.Location
3061	}
3062	if agfrs.Tags != nil {
3063		objectMap["tags"] = agfrs.Tags
3064	}
3065	return json.Marshal(objectMap)
3066}
3067
3068// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
3069func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
3070	var m map[string]*json.RawMessage
3071	err := json.Unmarshal(body, &m)
3072	if err != nil {
3073		return err
3074	}
3075	for k, v := range m {
3076		switch k {
3077		case "properties":
3078			if v != nil {
3079				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
3080				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
3081				if err != nil {
3082					return err
3083				}
3084				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
3085			}
3086		case "id":
3087			if v != nil {
3088				var ID string
3089				err = json.Unmarshal(*v, &ID)
3090				if err != nil {
3091					return err
3092				}
3093				agfrs.ID = &ID
3094			}
3095		case "name":
3096			if v != nil {
3097				var name string
3098				err = json.Unmarshal(*v, &name)
3099				if err != nil {
3100					return err
3101				}
3102				agfrs.Name = &name
3103			}
3104		case "type":
3105			if v != nil {
3106				var typeVar string
3107				err = json.Unmarshal(*v, &typeVar)
3108				if err != nil {
3109					return err
3110				}
3111				agfrs.Type = &typeVar
3112			}
3113		case "location":
3114			if v != nil {
3115				var location string
3116				err = json.Unmarshal(*v, &location)
3117				if err != nil {
3118					return err
3119				}
3120				agfrs.Location = &location
3121			}
3122		case "tags":
3123			if v != nil {
3124				var tags map[string]*string
3125				err = json.Unmarshal(*v, &tags)
3126				if err != nil {
3127					return err
3128				}
3129				agfrs.Tags = tags
3130			}
3131		}
3132	}
3133
3134	return nil
3135}
3136
3137// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
3138type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
3139	// ProvisioningState - The provisioning state of the web application firewall rule set. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3140	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3141	// RuleSetType - The type of the web application firewall rule set.
3142	RuleSetType *string `json:"ruleSetType,omitempty"`
3143	// RuleSetVersion - The version of the web application firewall rule set type.
3144	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
3145	// RuleGroups - The rule groups of the web application firewall rule set.
3146	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
3147}
3148
3149// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
3150type ApplicationGatewayFrontendIPConfiguration struct {
3151	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
3152	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3153	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
3154	Name *string `json:"name,omitempty"`
3155	// Etag - A unique read-only string that changes whenever the resource is updated.
3156	Etag *string `json:"etag,omitempty"`
3157	// Type - Type of the resource.
3158	Type *string `json:"type,omitempty"`
3159	// ID - Resource ID.
3160	ID *string `json:"id,omitempty"`
3161}
3162
3163// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
3164func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
3165	objectMap := make(map[string]interface{})
3166	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
3167		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3168	}
3169	if agfic.Name != nil {
3170		objectMap["name"] = agfic.Name
3171	}
3172	if agfic.Etag != nil {
3173		objectMap["etag"] = agfic.Etag
3174	}
3175	if agfic.Type != nil {
3176		objectMap["type"] = agfic.Type
3177	}
3178	if agfic.ID != nil {
3179		objectMap["id"] = agfic.ID
3180	}
3181	return json.Marshal(objectMap)
3182}
3183
3184// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
3185func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
3186	var m map[string]*json.RawMessage
3187	err := json.Unmarshal(body, &m)
3188	if err != nil {
3189		return err
3190	}
3191	for k, v := range m {
3192		switch k {
3193		case "properties":
3194			if v != nil {
3195				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
3196				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
3197				if err != nil {
3198					return err
3199				}
3200				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
3201			}
3202		case "name":
3203			if v != nil {
3204				var name string
3205				err = json.Unmarshal(*v, &name)
3206				if err != nil {
3207					return err
3208				}
3209				agfic.Name = &name
3210			}
3211		case "etag":
3212			if v != nil {
3213				var etag string
3214				err = json.Unmarshal(*v, &etag)
3215				if err != nil {
3216					return err
3217				}
3218				agfic.Etag = &etag
3219			}
3220		case "type":
3221			if v != nil {
3222				var typeVar string
3223				err = json.Unmarshal(*v, &typeVar)
3224				if err != nil {
3225					return err
3226				}
3227				agfic.Type = &typeVar
3228			}
3229		case "id":
3230			if v != nil {
3231				var ID string
3232				err = json.Unmarshal(*v, &ID)
3233				if err != nil {
3234					return err
3235				}
3236				agfic.ID = &ID
3237			}
3238		}
3239	}
3240
3241	return nil
3242}
3243
3244// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
3245// application gateway.
3246type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
3247	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
3248	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
3249	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
3250	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
3251	// Subnet - Reference of the subnet resource.
3252	Subnet *SubResource `json:"subnet,omitempty"`
3253	// PublicIPAddress - Reference of the PublicIP resource.
3254	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
3255	// ProvisioningState - The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3256	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3257}
3258
3259// ApplicationGatewayFrontendPort frontend port of an application gateway.
3260type ApplicationGatewayFrontendPort struct {
3261	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
3262	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
3263	// Name - Name of the frontend port that is unique within an Application Gateway.
3264	Name *string `json:"name,omitempty"`
3265	// Etag - A unique read-only string that changes whenever the resource is updated.
3266	Etag *string `json:"etag,omitempty"`
3267	// Type - Type of the resource.
3268	Type *string `json:"type,omitempty"`
3269	// ID - Resource ID.
3270	ID *string `json:"id,omitempty"`
3271}
3272
3273// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
3274func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
3275	objectMap := make(map[string]interface{})
3276	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
3277		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
3278	}
3279	if agfp.Name != nil {
3280		objectMap["name"] = agfp.Name
3281	}
3282	if agfp.Etag != nil {
3283		objectMap["etag"] = agfp.Etag
3284	}
3285	if agfp.Type != nil {
3286		objectMap["type"] = agfp.Type
3287	}
3288	if agfp.ID != nil {
3289		objectMap["id"] = agfp.ID
3290	}
3291	return json.Marshal(objectMap)
3292}
3293
3294// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
3295func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
3296	var m map[string]*json.RawMessage
3297	err := json.Unmarshal(body, &m)
3298	if err != nil {
3299		return err
3300	}
3301	for k, v := range m {
3302		switch k {
3303		case "properties":
3304			if v != nil {
3305				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
3306				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
3307				if err != nil {
3308					return err
3309				}
3310				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
3311			}
3312		case "name":
3313			if v != nil {
3314				var name string
3315				err = json.Unmarshal(*v, &name)
3316				if err != nil {
3317					return err
3318				}
3319				agfp.Name = &name
3320			}
3321		case "etag":
3322			if v != nil {
3323				var etag string
3324				err = json.Unmarshal(*v, &etag)
3325				if err != nil {
3326					return err
3327				}
3328				agfp.Etag = &etag
3329			}
3330		case "type":
3331			if v != nil {
3332				var typeVar string
3333				err = json.Unmarshal(*v, &typeVar)
3334				if err != nil {
3335					return err
3336				}
3337				agfp.Type = &typeVar
3338			}
3339		case "id":
3340			if v != nil {
3341				var ID string
3342				err = json.Unmarshal(*v, &ID)
3343				if err != nil {
3344					return err
3345				}
3346				agfp.ID = &ID
3347			}
3348		}
3349	}
3350
3351	return nil
3352}
3353
3354// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
3355type ApplicationGatewayFrontendPortPropertiesFormat struct {
3356	// Port - Frontend port.
3357	Port *int32 `json:"port,omitempty"`
3358	// ProvisioningState - The provisioning state of the frontend port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3359	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3360}
3361
3362// ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
3363type ApplicationGatewayHeaderConfiguration struct {
3364	// HeaderName - Header name of the header configuration.
3365	HeaderName *string `json:"headerName,omitempty"`
3366	// HeaderValue - Header value of the header configuration.
3367	HeaderValue *string `json:"headerValue,omitempty"`
3368}
3369
3370// ApplicationGatewayHTTPListener http listener of an application gateway.
3371type ApplicationGatewayHTTPListener struct {
3372	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
3373	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
3374	// Name - Name of the HTTP listener that is unique within an Application Gateway.
3375	Name *string `json:"name,omitempty"`
3376	// Etag - A unique read-only string that changes whenever the resource is updated.
3377	Etag *string `json:"etag,omitempty"`
3378	// Type - Type of the resource.
3379	Type *string `json:"type,omitempty"`
3380	// ID - Resource ID.
3381	ID *string `json:"id,omitempty"`
3382}
3383
3384// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
3385func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
3386	objectMap := make(map[string]interface{})
3387	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
3388		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
3389	}
3390	if aghl.Name != nil {
3391		objectMap["name"] = aghl.Name
3392	}
3393	if aghl.Etag != nil {
3394		objectMap["etag"] = aghl.Etag
3395	}
3396	if aghl.Type != nil {
3397		objectMap["type"] = aghl.Type
3398	}
3399	if aghl.ID != nil {
3400		objectMap["id"] = aghl.ID
3401	}
3402	return json.Marshal(objectMap)
3403}
3404
3405// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
3406func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
3407	var m map[string]*json.RawMessage
3408	err := json.Unmarshal(body, &m)
3409	if err != nil {
3410		return err
3411	}
3412	for k, v := range m {
3413		switch k {
3414		case "properties":
3415			if v != nil {
3416				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
3417				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
3418				if err != nil {
3419					return err
3420				}
3421				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
3422			}
3423		case "name":
3424			if v != nil {
3425				var name string
3426				err = json.Unmarshal(*v, &name)
3427				if err != nil {
3428					return err
3429				}
3430				aghl.Name = &name
3431			}
3432		case "etag":
3433			if v != nil {
3434				var etag string
3435				err = json.Unmarshal(*v, &etag)
3436				if err != nil {
3437					return err
3438				}
3439				aghl.Etag = &etag
3440			}
3441		case "type":
3442			if v != nil {
3443				var typeVar string
3444				err = json.Unmarshal(*v, &typeVar)
3445				if err != nil {
3446					return err
3447				}
3448				aghl.Type = &typeVar
3449			}
3450		case "id":
3451			if v != nil {
3452				var ID string
3453				err = json.Unmarshal(*v, &ID)
3454				if err != nil {
3455					return err
3456				}
3457				aghl.ID = &ID
3458			}
3459		}
3460	}
3461
3462	return nil
3463}
3464
3465// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
3466type ApplicationGatewayHTTPListenerPropertiesFormat struct {
3467	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
3468	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
3469	// FrontendPort - Frontend port resource of an application gateway.
3470	FrontendPort *SubResource `json:"frontendPort,omitempty"`
3471	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
3472	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3473	// HostName - Host name of HTTP listener.
3474	HostName *string `json:"hostName,omitempty"`
3475	// SslCertificate - SSL certificate resource of an application gateway.
3476	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
3477	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
3478	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
3479	// ProvisioningState - The provisioning state of the HTTP listener resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3480	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3481	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
3482	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
3483}
3484
3485// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
3486// private IP configuration is allowed.
3487type ApplicationGatewayIPConfiguration struct {
3488	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
3489	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
3490	// Name - Name of the IP configuration that is unique within an Application Gateway.
3491	Name *string `json:"name,omitempty"`
3492	// Etag - A unique read-only string that changes whenever the resource is updated.
3493	Etag *string `json:"etag,omitempty"`
3494	// Type - Type of the resource.
3495	Type *string `json:"type,omitempty"`
3496	// ID - Resource ID.
3497	ID *string `json:"id,omitempty"`
3498}
3499
3500// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
3501func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
3502	objectMap := make(map[string]interface{})
3503	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
3504		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
3505	}
3506	if agic.Name != nil {
3507		objectMap["name"] = agic.Name
3508	}
3509	if agic.Etag != nil {
3510		objectMap["etag"] = agic.Etag
3511	}
3512	if agic.Type != nil {
3513		objectMap["type"] = agic.Type
3514	}
3515	if agic.ID != nil {
3516		objectMap["id"] = agic.ID
3517	}
3518	return json.Marshal(objectMap)
3519}
3520
3521// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
3522func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
3523	var m map[string]*json.RawMessage
3524	err := json.Unmarshal(body, &m)
3525	if err != nil {
3526		return err
3527	}
3528	for k, v := range m {
3529		switch k {
3530		case "properties":
3531			if v != nil {
3532				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
3533				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
3534				if err != nil {
3535					return err
3536				}
3537				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
3538			}
3539		case "name":
3540			if v != nil {
3541				var name string
3542				err = json.Unmarshal(*v, &name)
3543				if err != nil {
3544					return err
3545				}
3546				agic.Name = &name
3547			}
3548		case "etag":
3549			if v != nil {
3550				var etag string
3551				err = json.Unmarshal(*v, &etag)
3552				if err != nil {
3553					return err
3554				}
3555				agic.Etag = &etag
3556			}
3557		case "type":
3558			if v != nil {
3559				var typeVar string
3560				err = json.Unmarshal(*v, &typeVar)
3561				if err != nil {
3562					return err
3563				}
3564				agic.Type = &typeVar
3565			}
3566		case "id":
3567			if v != nil {
3568				var ID string
3569				err = json.Unmarshal(*v, &ID)
3570				if err != nil {
3571					return err
3572				}
3573				agic.ID = &ID
3574			}
3575		}
3576	}
3577
3578	return nil
3579}
3580
3581// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
3582// gateway.
3583type ApplicationGatewayIPConfigurationPropertiesFormat struct {
3584	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
3585	Subnet *SubResource `json:"subnet,omitempty"`
3586	// ProvisioningState - The provisioning state of the application gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3587	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3588}
3589
3590// ApplicationGatewayListResult response for ListApplicationGateways API service call.
3591type ApplicationGatewayListResult struct {
3592	autorest.Response `json:"-"`
3593	// Value - List of an application gateways in a resource group.
3594	Value *[]ApplicationGateway `json:"value,omitempty"`
3595	// NextLink - URL to get the next set of results.
3596	NextLink *string `json:"nextLink,omitempty"`
3597}
3598
3599// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
3600type ApplicationGatewayListResultIterator struct {
3601	i    int
3602	page ApplicationGatewayListResultPage
3603}
3604
3605// NextWithContext advances to the next value.  If there was an error making
3606// the request the iterator does not advance and the error is returned.
3607func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
3608	if tracing.IsEnabled() {
3609		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
3610		defer func() {
3611			sc := -1
3612			if iter.Response().Response.Response != nil {
3613				sc = iter.Response().Response.Response.StatusCode
3614			}
3615			tracing.EndSpan(ctx, sc, err)
3616		}()
3617	}
3618	iter.i++
3619	if iter.i < len(iter.page.Values()) {
3620		return nil
3621	}
3622	err = iter.page.NextWithContext(ctx)
3623	if err != nil {
3624		iter.i--
3625		return err
3626	}
3627	iter.i = 0
3628	return nil
3629}
3630
3631// Next advances to the next value.  If there was an error making
3632// the request the iterator does not advance and the error is returned.
3633// Deprecated: Use NextWithContext() instead.
3634func (iter *ApplicationGatewayListResultIterator) Next() error {
3635	return iter.NextWithContext(context.Background())
3636}
3637
3638// NotDone returns true if the enumeration should be started or is not yet complete.
3639func (iter ApplicationGatewayListResultIterator) NotDone() bool {
3640	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3641}
3642
3643// Response returns the raw server response from the last page request.
3644func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
3645	return iter.page.Response()
3646}
3647
3648// Value returns the current value or a zero-initialized value if the
3649// iterator has advanced beyond the end of the collection.
3650func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
3651	if !iter.page.NotDone() {
3652		return ApplicationGateway{}
3653	}
3654	return iter.page.Values()[iter.i]
3655}
3656
3657// Creates a new instance of the ApplicationGatewayListResultIterator type.
3658func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
3659	return ApplicationGatewayListResultIterator{page: page}
3660}
3661
3662// IsEmpty returns true if the ListResult contains no values.
3663func (aglr ApplicationGatewayListResult) IsEmpty() bool {
3664	return aglr.Value == nil || len(*aglr.Value) == 0
3665}
3666
3667// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
3668// It returns nil if no more results exist.
3669func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
3670	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
3671		return nil, nil
3672	}
3673	return autorest.Prepare((&http.Request{}).WithContext(ctx),
3674		autorest.AsJSON(),
3675		autorest.AsGet(),
3676		autorest.WithBaseURL(to.String(aglr.NextLink)))
3677}
3678
3679// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
3680type ApplicationGatewayListResultPage struct {
3681	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
3682	aglr ApplicationGatewayListResult
3683}
3684
3685// NextWithContext advances to the next page of values.  If there was an error making
3686// the request the page does not advance and the error is returned.
3687func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
3688	if tracing.IsEnabled() {
3689		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
3690		defer func() {
3691			sc := -1
3692			if page.Response().Response.Response != nil {
3693				sc = page.Response().Response.Response.StatusCode
3694			}
3695			tracing.EndSpan(ctx, sc, err)
3696		}()
3697	}
3698	next, err := page.fn(ctx, page.aglr)
3699	if err != nil {
3700		return err
3701	}
3702	page.aglr = next
3703	return nil
3704}
3705
3706// Next advances to the next page of values.  If there was an error making
3707// the request the page does not advance and the error is returned.
3708// Deprecated: Use NextWithContext() instead.
3709func (page *ApplicationGatewayListResultPage) Next() error {
3710	return page.NextWithContext(context.Background())
3711}
3712
3713// NotDone returns true if the page enumeration should be started or is not yet complete.
3714func (page ApplicationGatewayListResultPage) NotDone() bool {
3715	return !page.aglr.IsEmpty()
3716}
3717
3718// Response returns the raw server response from the last page request.
3719func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
3720	return page.aglr
3721}
3722
3723// Values returns the slice of values for the current page or nil if there are no values.
3724func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
3725	if page.aglr.IsEmpty() {
3726		return nil
3727	}
3728	return *page.aglr.Value
3729}
3730
3731// Creates a new instance of the ApplicationGatewayListResultPage type.
3732func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
3733	return ApplicationGatewayListResultPage{fn: getNextPage}
3734}
3735
3736// ApplicationGatewayOnDemandProbe details of on demand test probe request.
3737type ApplicationGatewayOnDemandProbe struct {
3738	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3739	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3740	// Host - Host name to send the probe to.
3741	Host *string `json:"host,omitempty"`
3742	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
3743	Path *string `json:"path,omitempty"`
3744	// 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.
3745	Timeout *int32 `json:"timeout,omitempty"`
3746	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3747	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3748	// Match - Criterion for classifying a healthy probe response.
3749	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3750	// BackendAddressPool - Reference of backend pool of application gateway to which probe request will be sent.
3751	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3752	// BackendHTTPSettings - Reference of backend http setting of application gateway to be used for test probe.
3753	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3754}
3755
3756// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
3757type ApplicationGatewayPathRule struct {
3758	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
3759	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
3760	// Name - Name of the path rule that is unique within an Application Gateway.
3761	Name *string `json:"name,omitempty"`
3762	// Etag - A unique read-only string that changes whenever the resource is updated.
3763	Etag *string `json:"etag,omitempty"`
3764	// Type - Type of the resource.
3765	Type *string `json:"type,omitempty"`
3766	// ID - Resource ID.
3767	ID *string `json:"id,omitempty"`
3768}
3769
3770// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
3771func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
3772	objectMap := make(map[string]interface{})
3773	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
3774		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
3775	}
3776	if agpr.Name != nil {
3777		objectMap["name"] = agpr.Name
3778	}
3779	if agpr.Etag != nil {
3780		objectMap["etag"] = agpr.Etag
3781	}
3782	if agpr.Type != nil {
3783		objectMap["type"] = agpr.Type
3784	}
3785	if agpr.ID != nil {
3786		objectMap["id"] = agpr.ID
3787	}
3788	return json.Marshal(objectMap)
3789}
3790
3791// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
3792func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
3793	var m map[string]*json.RawMessage
3794	err := json.Unmarshal(body, &m)
3795	if err != nil {
3796		return err
3797	}
3798	for k, v := range m {
3799		switch k {
3800		case "properties":
3801			if v != nil {
3802				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
3803				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
3804				if err != nil {
3805					return err
3806				}
3807				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
3808			}
3809		case "name":
3810			if v != nil {
3811				var name string
3812				err = json.Unmarshal(*v, &name)
3813				if err != nil {
3814					return err
3815				}
3816				agpr.Name = &name
3817			}
3818		case "etag":
3819			if v != nil {
3820				var etag string
3821				err = json.Unmarshal(*v, &etag)
3822				if err != nil {
3823					return err
3824				}
3825				agpr.Etag = &etag
3826			}
3827		case "type":
3828			if v != nil {
3829				var typeVar string
3830				err = json.Unmarshal(*v, &typeVar)
3831				if err != nil {
3832					return err
3833				}
3834				agpr.Type = &typeVar
3835			}
3836		case "id":
3837			if v != nil {
3838				var ID string
3839				err = json.Unmarshal(*v, &ID)
3840				if err != nil {
3841					return err
3842				}
3843				agpr.ID = &ID
3844			}
3845		}
3846	}
3847
3848	return nil
3849}
3850
3851// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
3852type ApplicationGatewayPathRulePropertiesFormat struct {
3853	// Paths - Path rules of URL path map.
3854	Paths *[]string `json:"paths,omitempty"`
3855	// BackendAddressPool - Backend address pool resource of URL path map path rule.
3856	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3857	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
3858	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3859	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
3860	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3861	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
3862	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
3863	// ProvisioningState - The provisioning state of the path rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3864	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3865}
3866
3867// ApplicationGatewayProbe probe of the application gateway.
3868type ApplicationGatewayProbe struct {
3869	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
3870	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
3871	// Name - Name of the probe that is unique within an Application Gateway.
3872	Name *string `json:"name,omitempty"`
3873	// Etag - A unique read-only string that changes whenever the resource is updated.
3874	Etag *string `json:"etag,omitempty"`
3875	// Type - Type of the resource.
3876	Type *string `json:"type,omitempty"`
3877	// ID - Resource ID.
3878	ID *string `json:"id,omitempty"`
3879}
3880
3881// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
3882func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
3883	objectMap := make(map[string]interface{})
3884	if agp.ApplicationGatewayProbePropertiesFormat != nil {
3885		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
3886	}
3887	if agp.Name != nil {
3888		objectMap["name"] = agp.Name
3889	}
3890	if agp.Etag != nil {
3891		objectMap["etag"] = agp.Etag
3892	}
3893	if agp.Type != nil {
3894		objectMap["type"] = agp.Type
3895	}
3896	if agp.ID != nil {
3897		objectMap["id"] = agp.ID
3898	}
3899	return json.Marshal(objectMap)
3900}
3901
3902// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
3903func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
3904	var m map[string]*json.RawMessage
3905	err := json.Unmarshal(body, &m)
3906	if err != nil {
3907		return err
3908	}
3909	for k, v := range m {
3910		switch k {
3911		case "properties":
3912			if v != nil {
3913				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
3914				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
3915				if err != nil {
3916					return err
3917				}
3918				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
3919			}
3920		case "name":
3921			if v != nil {
3922				var name string
3923				err = json.Unmarshal(*v, &name)
3924				if err != nil {
3925					return err
3926				}
3927				agp.Name = &name
3928			}
3929		case "etag":
3930			if v != nil {
3931				var etag string
3932				err = json.Unmarshal(*v, &etag)
3933				if err != nil {
3934					return err
3935				}
3936				agp.Etag = &etag
3937			}
3938		case "type":
3939			if v != nil {
3940				var typeVar string
3941				err = json.Unmarshal(*v, &typeVar)
3942				if err != nil {
3943					return err
3944				}
3945				agp.Type = &typeVar
3946			}
3947		case "id":
3948			if v != nil {
3949				var ID string
3950				err = json.Unmarshal(*v, &ID)
3951				if err != nil {
3952					return err
3953				}
3954				agp.ID = &ID
3955			}
3956		}
3957	}
3958
3959	return nil
3960}
3961
3962// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match.
3963type ApplicationGatewayProbeHealthResponseMatch struct {
3964	// Body - Body that must be contained in the health response. Default value is empty.
3965	Body *string `json:"body,omitempty"`
3966	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
3967	StatusCodes *[]string `json:"statusCodes,omitempty"`
3968}
3969
3970// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
3971type ApplicationGatewayProbePropertiesFormat struct {
3972	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
3973	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
3974	// Host - Host name to send the probe to.
3975	Host *string `json:"host,omitempty"`
3976	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
3977	Path *string `json:"path,omitempty"`
3978	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
3979	Interval *int32 `json:"interval,omitempty"`
3980	// 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.
3981	Timeout *int32 `json:"timeout,omitempty"`
3982	// 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.
3983	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
3984	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
3985	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
3986	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
3987	MinServers *int32 `json:"minServers,omitempty"`
3988	// Match - Criterion for classifying a healthy probe response.
3989	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
3990	// ProvisioningState - The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
3991	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
3992	// 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.
3993	Port *int32 `json:"port,omitempty"`
3994}
3995
3996// ApplicationGatewayPropertiesFormat properties of the application gateway.
3997type ApplicationGatewayPropertiesFormat struct {
3998	// Sku - SKU of the application gateway resource.
3999	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
4000	// SslPolicy - SSL policy of the application gateway resource.
4001	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
4002	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
4003	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
4004	// 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).
4005	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
4006	// 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).
4007	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
4008	// 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).
4009	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
4010	// 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).
4011	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
4012	// 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).
4013	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
4014	// 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).
4015	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
4016	// Probes - Probes of the application gateway resource.
4017	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
4018	// 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).
4019	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
4020	// 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).
4021	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
4022	// 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).
4023	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
4024	// 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).
4025	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
4026	// RequestRoutingRules - Request routing rules of the application gateway resource.
4027	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
4028	// RewriteRuleSets - Rewrite rules for the application gateway resource.
4029	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
4030	// 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).
4031	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
4032	// WebApplicationFirewallConfiguration - Web application firewall configuration.
4033	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
4034	// FirewallPolicy - Reference of the FirewallPolicy resource.
4035	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
4036	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
4037	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
4038	// EnableFips - Whether FIPS is enabled on the application gateway resource.
4039	EnableFips *bool `json:"enableFips,omitempty"`
4040	// AutoscaleConfiguration - Autoscale Configuration.
4041	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
4042	// ResourceGUID - The resource GUID property of the application gateway resource.
4043	ResourceGUID *string `json:"resourceGuid,omitempty"`
4044	// ProvisioningState - The provisioning state of the application gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4045	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4046	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
4047	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
4048}
4049
4050// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
4051type ApplicationGatewayRedirectConfiguration struct {
4052	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
4053	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
4054	// Name - Name of the redirect configuration that is unique within an Application Gateway.
4055	Name *string `json:"name,omitempty"`
4056	// Etag - A unique read-only string that changes whenever the resource is updated.
4057	Etag *string `json:"etag,omitempty"`
4058	// Type - Type of the resource.
4059	Type *string `json:"type,omitempty"`
4060	// ID - Resource ID.
4061	ID *string `json:"id,omitempty"`
4062}
4063
4064// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
4065func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
4066	objectMap := make(map[string]interface{})
4067	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
4068		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
4069	}
4070	if agrc.Name != nil {
4071		objectMap["name"] = agrc.Name
4072	}
4073	if agrc.Etag != nil {
4074		objectMap["etag"] = agrc.Etag
4075	}
4076	if agrc.Type != nil {
4077		objectMap["type"] = agrc.Type
4078	}
4079	if agrc.ID != nil {
4080		objectMap["id"] = agrc.ID
4081	}
4082	return json.Marshal(objectMap)
4083}
4084
4085// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
4086func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
4087	var m map[string]*json.RawMessage
4088	err := json.Unmarshal(body, &m)
4089	if err != nil {
4090		return err
4091	}
4092	for k, v := range m {
4093		switch k {
4094		case "properties":
4095			if v != nil {
4096				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
4097				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
4098				if err != nil {
4099					return err
4100				}
4101				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
4102			}
4103		case "name":
4104			if v != nil {
4105				var name string
4106				err = json.Unmarshal(*v, &name)
4107				if err != nil {
4108					return err
4109				}
4110				agrc.Name = &name
4111			}
4112		case "etag":
4113			if v != nil {
4114				var etag string
4115				err = json.Unmarshal(*v, &etag)
4116				if err != nil {
4117					return err
4118				}
4119				agrc.Etag = &etag
4120			}
4121		case "type":
4122			if v != nil {
4123				var typeVar string
4124				err = json.Unmarshal(*v, &typeVar)
4125				if err != nil {
4126					return err
4127				}
4128				agrc.Type = &typeVar
4129			}
4130		case "id":
4131			if v != nil {
4132				var ID string
4133				err = json.Unmarshal(*v, &ID)
4134				if err != nil {
4135					return err
4136				}
4137				agrc.ID = &ID
4138			}
4139		}
4140	}
4141
4142	return nil
4143}
4144
4145// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
4146// application gateway.
4147type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
4148	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
4149	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
4150	// TargetListener - Reference to a listener to redirect the request to.
4151	TargetListener *SubResource `json:"targetListener,omitempty"`
4152	// TargetURL - Url to redirect the request to.
4153	TargetURL *string `json:"targetUrl,omitempty"`
4154	// IncludePath - Include path in the redirected url.
4155	IncludePath *bool `json:"includePath,omitempty"`
4156	// IncludeQueryString - Include query string in the redirected url.
4157	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
4158	// RequestRoutingRules - Request routing specifying redirect configuration.
4159	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
4160	// URLPathMaps - Url path maps specifying default redirect configuration.
4161	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
4162	// PathRules - Path rules specifying redirect configuration.
4163	PathRules *[]SubResource `json:"pathRules,omitempty"`
4164}
4165
4166// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
4167type ApplicationGatewayRequestRoutingRule struct {
4168	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
4169	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
4170	// Name - Name of the request routing rule that is unique within an Application Gateway.
4171	Name *string `json:"name,omitempty"`
4172	// Etag - A unique read-only string that changes whenever the resource is updated.
4173	Etag *string `json:"etag,omitempty"`
4174	// Type - Type of the resource.
4175	Type *string `json:"type,omitempty"`
4176	// ID - Resource ID.
4177	ID *string `json:"id,omitempty"`
4178}
4179
4180// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
4181func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
4182	objectMap := make(map[string]interface{})
4183	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
4184		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
4185	}
4186	if agrrr.Name != nil {
4187		objectMap["name"] = agrrr.Name
4188	}
4189	if agrrr.Etag != nil {
4190		objectMap["etag"] = agrrr.Etag
4191	}
4192	if agrrr.Type != nil {
4193		objectMap["type"] = agrrr.Type
4194	}
4195	if agrrr.ID != nil {
4196		objectMap["id"] = agrrr.ID
4197	}
4198	return json.Marshal(objectMap)
4199}
4200
4201// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
4202func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
4203	var m map[string]*json.RawMessage
4204	err := json.Unmarshal(body, &m)
4205	if err != nil {
4206		return err
4207	}
4208	for k, v := range m {
4209		switch k {
4210		case "properties":
4211			if v != nil {
4212				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
4213				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
4214				if err != nil {
4215					return err
4216				}
4217				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
4218			}
4219		case "name":
4220			if v != nil {
4221				var name string
4222				err = json.Unmarshal(*v, &name)
4223				if err != nil {
4224					return err
4225				}
4226				agrrr.Name = &name
4227			}
4228		case "etag":
4229			if v != nil {
4230				var etag string
4231				err = json.Unmarshal(*v, &etag)
4232				if err != nil {
4233					return err
4234				}
4235				agrrr.Etag = &etag
4236			}
4237		case "type":
4238			if v != nil {
4239				var typeVar string
4240				err = json.Unmarshal(*v, &typeVar)
4241				if err != nil {
4242					return err
4243				}
4244				agrrr.Type = &typeVar
4245			}
4246		case "id":
4247			if v != nil {
4248				var ID string
4249				err = json.Unmarshal(*v, &ID)
4250				if err != nil {
4251					return err
4252				}
4253				agrrr.ID = &ID
4254			}
4255		}
4256	}
4257
4258	return nil
4259}
4260
4261// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
4262// application gateway.
4263type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
4264	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
4265	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
4266	// Priority - Priority of the request routing rule.
4267	Priority *int32 `json:"priority,omitempty"`
4268	// BackendAddressPool - Backend address pool resource of the application gateway.
4269	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
4270	// BackendHTTPSettings - Backend http settings resource of the application gateway.
4271	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
4272	// HTTPListener - Http listener resource of the application gateway.
4273	HTTPListener *SubResource `json:"httpListener,omitempty"`
4274	// URLPathMap - URL path map resource of the application gateway.
4275	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
4276	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
4277	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
4278	// RedirectConfiguration - Redirect configuration resource of the application gateway.
4279	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
4280	// ProvisioningState - The provisioning state of the request routing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4281	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4282}
4283
4284// ApplicationGatewayRewriteRule rewrite rule of an application gateway.
4285type ApplicationGatewayRewriteRule struct {
4286	// Name - Name of the rewrite rule that is unique within an Application Gateway.
4287	Name *string `json:"name,omitempty"`
4288	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
4289	RuleSequence *int32 `json:"ruleSequence,omitempty"`
4290	// Conditions - Conditions based on which the action set execution will be evaluated.
4291	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
4292	// ActionSet - Set of actions to be done as part of the rewrite Rule.
4293	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
4294}
4295
4296// ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
4297type ApplicationGatewayRewriteRuleActionSet struct {
4298	// RequestHeaderConfigurations - Request Header Actions in the Action Set.
4299	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
4300	// ResponseHeaderConfigurations - Response Header Actions in the Action Set.
4301	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
4302}
4303
4304// ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
4305type ApplicationGatewayRewriteRuleCondition struct {
4306	// Variable - The condition parameter of the RewriteRuleCondition.
4307	Variable *string `json:"variable,omitempty"`
4308	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
4309	Pattern *string `json:"pattern,omitempty"`
4310	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
4311	IgnoreCase *bool `json:"ignoreCase,omitempty"`
4312	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
4313	Negate *bool `json:"negate,omitempty"`
4314}
4315
4316// ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
4317type ApplicationGatewayRewriteRuleSet struct {
4318	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
4319	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
4320	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
4321	Name *string `json:"name,omitempty"`
4322	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
4323	Etag *string `json:"etag,omitempty"`
4324	// ID - Resource ID.
4325	ID *string `json:"id,omitempty"`
4326}
4327
4328// MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
4329func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
4330	objectMap := make(map[string]interface{})
4331	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
4332		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
4333	}
4334	if agrrs.Name != nil {
4335		objectMap["name"] = agrrs.Name
4336	}
4337	if agrrs.ID != nil {
4338		objectMap["id"] = agrrs.ID
4339	}
4340	return json.Marshal(objectMap)
4341}
4342
4343// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
4344func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
4345	var m map[string]*json.RawMessage
4346	err := json.Unmarshal(body, &m)
4347	if err != nil {
4348		return err
4349	}
4350	for k, v := range m {
4351		switch k {
4352		case "properties":
4353			if v != nil {
4354				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
4355				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
4356				if err != nil {
4357					return err
4358				}
4359				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
4360			}
4361		case "name":
4362			if v != nil {
4363				var name string
4364				err = json.Unmarshal(*v, &name)
4365				if err != nil {
4366					return err
4367				}
4368				agrrs.Name = &name
4369			}
4370		case "etag":
4371			if v != nil {
4372				var etag string
4373				err = json.Unmarshal(*v, &etag)
4374				if err != nil {
4375					return err
4376				}
4377				agrrs.Etag = &etag
4378			}
4379		case "id":
4380			if v != nil {
4381				var ID string
4382				err = json.Unmarshal(*v, &ID)
4383				if err != nil {
4384					return err
4385				}
4386				agrrs.ID = &ID
4387			}
4388		}
4389	}
4390
4391	return nil
4392}
4393
4394// ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
4395// gateway.
4396type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
4397	// RewriteRules - Rewrite rules in the rewrite rule set.
4398	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
4399	// ProvisioningState - READ-ONLY; The provisioning state of the rewrite rule set resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4400	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4401}
4402
4403// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
4404// long-running operation.
4405type ApplicationGatewaysBackendHealthFuture struct {
4406	azure.Future
4407}
4408
4409// Result returns the result of the asynchronous operation.
4410// If the operation has not completed it will return an error.
4411func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
4412	var done bool
4413	done, err = future.DoneWithContext(context.Background(), client)
4414	if err != nil {
4415		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
4416		return
4417	}
4418	if !done {
4419		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
4420		return
4421	}
4422	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4423	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
4424		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
4425		if err != nil {
4426			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
4427		}
4428	}
4429	return
4430}
4431
4432// ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
4433// of a long-running operation.
4434type ApplicationGatewaysBackendHealthOnDemandFuture struct {
4435	azure.Future
4436}
4437
4438// Result returns the result of the asynchronous operation.
4439// If the operation has not completed it will return an error.
4440func (future *ApplicationGatewaysBackendHealthOnDemandFuture) Result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
4441	var done bool
4442	done, err = future.DoneWithContext(context.Background(), client)
4443	if err != nil {
4444		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
4445		return
4446	}
4447	if !done {
4448		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
4449		return
4450	}
4451	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4452	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
4453		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
4454		if err != nil {
4455			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
4456		}
4457	}
4458	return
4459}
4460
4461// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
4462// long-running operation.
4463type ApplicationGatewaysCreateOrUpdateFuture struct {
4464	azure.Future
4465}
4466
4467// Result returns the result of the asynchronous operation.
4468// If the operation has not completed it will return an error.
4469func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4470	var done bool
4471	done, err = future.DoneWithContext(context.Background(), client)
4472	if err != nil {
4473		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4474		return
4475	}
4476	if !done {
4477		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
4478		return
4479	}
4480	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4481	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4482		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
4483		if err != nil {
4484			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
4485		}
4486	}
4487	return
4488}
4489
4490// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
4491// long-running operation.
4492type ApplicationGatewaysDeleteFuture struct {
4493	azure.Future
4494}
4495
4496// Result returns the result of the asynchronous operation.
4497// If the operation has not completed it will return an error.
4498func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4499	var done bool
4500	done, err = future.DoneWithContext(context.Background(), client)
4501	if err != nil {
4502		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
4503		return
4504	}
4505	if !done {
4506		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
4507		return
4508	}
4509	ar.Response = future.Response()
4510	return
4511}
4512
4513// ApplicationGatewaySku SKU of an application gateway.
4514type ApplicationGatewaySku struct {
4515	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
4516	Name ApplicationGatewaySkuName `json:"name,omitempty"`
4517	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
4518	Tier ApplicationGatewayTier `json:"tier,omitempty"`
4519	// Capacity - Capacity (instance count) of an application gateway.
4520	Capacity *int32 `json:"capacity,omitempty"`
4521}
4522
4523// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
4524type ApplicationGatewaySslCertificate struct {
4525	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
4526	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
4527	// Name - Name of the SSL certificate that is unique within an Application Gateway.
4528	Name *string `json:"name,omitempty"`
4529	// Etag - A unique read-only string that changes whenever the resource is updated.
4530	Etag *string `json:"etag,omitempty"`
4531	// Type - Type of the resource.
4532	Type *string `json:"type,omitempty"`
4533	// ID - Resource ID.
4534	ID *string `json:"id,omitempty"`
4535}
4536
4537// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
4538func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
4539	objectMap := make(map[string]interface{})
4540	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
4541		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
4542	}
4543	if agsc.Name != nil {
4544		objectMap["name"] = agsc.Name
4545	}
4546	if agsc.Etag != nil {
4547		objectMap["etag"] = agsc.Etag
4548	}
4549	if agsc.Type != nil {
4550		objectMap["type"] = agsc.Type
4551	}
4552	if agsc.ID != nil {
4553		objectMap["id"] = agsc.ID
4554	}
4555	return json.Marshal(objectMap)
4556}
4557
4558// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
4559func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
4560	var m map[string]*json.RawMessage
4561	err := json.Unmarshal(body, &m)
4562	if err != nil {
4563		return err
4564	}
4565	for k, v := range m {
4566		switch k {
4567		case "properties":
4568			if v != nil {
4569				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
4570				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
4571				if err != nil {
4572					return err
4573				}
4574				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
4575			}
4576		case "name":
4577			if v != nil {
4578				var name string
4579				err = json.Unmarshal(*v, &name)
4580				if err != nil {
4581					return err
4582				}
4583				agsc.Name = &name
4584			}
4585		case "etag":
4586			if v != nil {
4587				var etag string
4588				err = json.Unmarshal(*v, &etag)
4589				if err != nil {
4590					return err
4591				}
4592				agsc.Etag = &etag
4593			}
4594		case "type":
4595			if v != nil {
4596				var typeVar string
4597				err = json.Unmarshal(*v, &typeVar)
4598				if err != nil {
4599					return err
4600				}
4601				agsc.Type = &typeVar
4602			}
4603		case "id":
4604			if v != nil {
4605				var ID string
4606				err = json.Unmarshal(*v, &ID)
4607				if err != nil {
4608					return err
4609				}
4610				agsc.ID = &ID
4611			}
4612		}
4613	}
4614
4615	return nil
4616}
4617
4618// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
4619// gateway.
4620type ApplicationGatewaySslCertificatePropertiesFormat struct {
4621	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
4622	Data *string `json:"data,omitempty"`
4623	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
4624	Password *string `json:"password,omitempty"`
4625	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
4626	PublicCertData *string `json:"publicCertData,omitempty"`
4627	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4628	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4629	// ProvisioningState - The provisioning state of the SSL certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4630	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4631}
4632
4633// ApplicationGatewaySslPolicy application Gateway Ssl policy.
4634type ApplicationGatewaySslPolicy struct {
4635	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
4636	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
4637	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
4638	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
4639	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
4640	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
4641	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
4642	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4643	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4644	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4645}
4646
4647// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy.
4648type ApplicationGatewaySslPredefinedPolicy struct {
4649	autorest.Response `json:"-"`
4650	// Name - Name of the Ssl predefined policy.
4651	Name *string `json:"name,omitempty"`
4652	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
4653	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
4654	// ID - Resource ID.
4655	ID *string `json:"id,omitempty"`
4656}
4657
4658// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
4659func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
4660	objectMap := make(map[string]interface{})
4661	if agspp.Name != nil {
4662		objectMap["name"] = agspp.Name
4663	}
4664	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
4665		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4666	}
4667	if agspp.ID != nil {
4668		objectMap["id"] = agspp.ID
4669	}
4670	return json.Marshal(objectMap)
4671}
4672
4673// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
4674func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
4675	var m map[string]*json.RawMessage
4676	err := json.Unmarshal(body, &m)
4677	if err != nil {
4678		return err
4679	}
4680	for k, v := range m {
4681		switch k {
4682		case "name":
4683			if v != nil {
4684				var name string
4685				err = json.Unmarshal(*v, &name)
4686				if err != nil {
4687					return err
4688				}
4689				agspp.Name = &name
4690			}
4691		case "properties":
4692			if v != nil {
4693				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
4694				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
4695				if err != nil {
4696					return err
4697				}
4698				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
4699			}
4700		case "id":
4701			if v != nil {
4702				var ID string
4703				err = json.Unmarshal(*v, &ID)
4704				if err != nil {
4705					return err
4706				}
4707				agspp.ID = &ID
4708			}
4709		}
4710	}
4711
4712	return nil
4713}
4714
4715// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
4716// ApplicationGatewaySslPredefinedPolicy.
4717type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
4718	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
4719	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
4720	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
4721	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
4722}
4723
4724// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
4725// long-running operation.
4726type ApplicationGatewaysStartFuture struct {
4727	azure.Future
4728}
4729
4730// Result returns the result of the asynchronous operation.
4731// If the operation has not completed it will return an error.
4732func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4733	var done bool
4734	done, err = future.DoneWithContext(context.Background(), client)
4735	if err != nil {
4736		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
4737		return
4738	}
4739	if !done {
4740		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
4741		return
4742	}
4743	ar.Response = future.Response()
4744	return
4745}
4746
4747// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
4748// operation.
4749type ApplicationGatewaysStopFuture struct {
4750	azure.Future
4751}
4752
4753// Result returns the result of the asynchronous operation.
4754// If the operation has not completed it will return an error.
4755func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
4756	var done bool
4757	done, err = future.DoneWithContext(context.Background(), client)
4758	if err != nil {
4759		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
4760		return
4761	}
4762	if !done {
4763		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
4764		return
4765	}
4766	ar.Response = future.Response()
4767	return
4768}
4769
4770// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
4771// long-running operation.
4772type ApplicationGatewaysUpdateTagsFuture struct {
4773	azure.Future
4774}
4775
4776// Result returns the result of the asynchronous operation.
4777// If the operation has not completed it will return an error.
4778func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
4779	var done bool
4780	done, err = future.DoneWithContext(context.Background(), client)
4781	if err != nil {
4782		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
4783		return
4784	}
4785	if !done {
4786		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
4787		return
4788	}
4789	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4790	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
4791		ag, err = client.UpdateTagsResponder(ag.Response.Response)
4792		if err != nil {
4793			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
4794		}
4795	}
4796	return
4797}
4798
4799// ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
4800type ApplicationGatewayTrustedRootCertificate struct {
4801	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
4802	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
4803	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
4804	Name *string `json:"name,omitempty"`
4805	// Etag - A unique read-only string that changes whenever the resource is updated.
4806	Etag *string `json:"etag,omitempty"`
4807	// Type - Type of the resource.
4808	Type *string `json:"type,omitempty"`
4809	// ID - Resource ID.
4810	ID *string `json:"id,omitempty"`
4811}
4812
4813// MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
4814func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
4815	objectMap := make(map[string]interface{})
4816	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
4817		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
4818	}
4819	if agtrc.Name != nil {
4820		objectMap["name"] = agtrc.Name
4821	}
4822	if agtrc.Etag != nil {
4823		objectMap["etag"] = agtrc.Etag
4824	}
4825	if agtrc.Type != nil {
4826		objectMap["type"] = agtrc.Type
4827	}
4828	if agtrc.ID != nil {
4829		objectMap["id"] = agtrc.ID
4830	}
4831	return json.Marshal(objectMap)
4832}
4833
4834// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
4835func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
4836	var m map[string]*json.RawMessage
4837	err := json.Unmarshal(body, &m)
4838	if err != nil {
4839		return err
4840	}
4841	for k, v := range m {
4842		switch k {
4843		case "properties":
4844			if v != nil {
4845				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
4846				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
4847				if err != nil {
4848					return err
4849				}
4850				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
4851			}
4852		case "name":
4853			if v != nil {
4854				var name string
4855				err = json.Unmarshal(*v, &name)
4856				if err != nil {
4857					return err
4858				}
4859				agtrc.Name = &name
4860			}
4861		case "etag":
4862			if v != nil {
4863				var etag string
4864				err = json.Unmarshal(*v, &etag)
4865				if err != nil {
4866					return err
4867				}
4868				agtrc.Etag = &etag
4869			}
4870		case "type":
4871			if v != nil {
4872				var typeVar string
4873				err = json.Unmarshal(*v, &typeVar)
4874				if err != nil {
4875					return err
4876				}
4877				agtrc.Type = &typeVar
4878			}
4879		case "id":
4880			if v != nil {
4881				var ID string
4882				err = json.Unmarshal(*v, &ID)
4883				if err != nil {
4884					return err
4885				}
4886				agtrc.ID = &ID
4887			}
4888		}
4889	}
4890
4891	return nil
4892}
4893
4894// ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
4895// application gateway.
4896type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
4897	// Data - Certificate public data.
4898	Data *string `json:"data,omitempty"`
4899	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
4900	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
4901	// ProvisioningState - The provisioning state of the trusted root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4902	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4903}
4904
4905// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
4906// PathBasedRouting.
4907type ApplicationGatewayURLPathMap struct {
4908	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
4909	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
4910	// Name - Name of the URL path map that is unique within an Application Gateway.
4911	Name *string `json:"name,omitempty"`
4912	// Etag - A unique read-only string that changes whenever the resource is updated.
4913	Etag *string `json:"etag,omitempty"`
4914	// Type - Type of the resource.
4915	Type *string `json:"type,omitempty"`
4916	// ID - Resource ID.
4917	ID *string `json:"id,omitempty"`
4918}
4919
4920// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
4921func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
4922	objectMap := make(map[string]interface{})
4923	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
4924		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
4925	}
4926	if agupm.Name != nil {
4927		objectMap["name"] = agupm.Name
4928	}
4929	if agupm.Etag != nil {
4930		objectMap["etag"] = agupm.Etag
4931	}
4932	if agupm.Type != nil {
4933		objectMap["type"] = agupm.Type
4934	}
4935	if agupm.ID != nil {
4936		objectMap["id"] = agupm.ID
4937	}
4938	return json.Marshal(objectMap)
4939}
4940
4941// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
4942func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
4943	var m map[string]*json.RawMessage
4944	err := json.Unmarshal(body, &m)
4945	if err != nil {
4946		return err
4947	}
4948	for k, v := range m {
4949		switch k {
4950		case "properties":
4951			if v != nil {
4952				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
4953				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
4954				if err != nil {
4955					return err
4956				}
4957				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
4958			}
4959		case "name":
4960			if v != nil {
4961				var name string
4962				err = json.Unmarshal(*v, &name)
4963				if err != nil {
4964					return err
4965				}
4966				agupm.Name = &name
4967			}
4968		case "etag":
4969			if v != nil {
4970				var etag string
4971				err = json.Unmarshal(*v, &etag)
4972				if err != nil {
4973					return err
4974				}
4975				agupm.Etag = &etag
4976			}
4977		case "type":
4978			if v != nil {
4979				var typeVar string
4980				err = json.Unmarshal(*v, &typeVar)
4981				if err != nil {
4982					return err
4983				}
4984				agupm.Type = &typeVar
4985			}
4986		case "id":
4987			if v != nil {
4988				var ID string
4989				err = json.Unmarshal(*v, &ID)
4990				if err != nil {
4991					return err
4992				}
4993				agupm.ID = &ID
4994			}
4995		}
4996	}
4997
4998	return nil
4999}
5000
5001// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
5002type ApplicationGatewayURLPathMapPropertiesFormat struct {
5003	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
5004	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
5005	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
5006	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
5007	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
5008	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
5009	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
5010	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
5011	// PathRules - Path rule of URL path map resource.
5012	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
5013	// ProvisioningState - The provisioning state of the URL path map resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5014	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5015}
5016
5017// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
5018// configuration.
5019type ApplicationGatewayWebApplicationFirewallConfiguration struct {
5020	// Enabled - Whether the web application firewall is enabled or not.
5021	Enabled *bool `json:"enabled,omitempty"`
5022	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
5023	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
5024	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
5025	RuleSetType *string `json:"ruleSetType,omitempty"`
5026	// RuleSetVersion - The version of the rule set type.
5027	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
5028	// DisabledRuleGroups - The disabled rule groups.
5029	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
5030	// RequestBodyCheck - Whether allow WAF to check request Body.
5031	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
5032	// MaxRequestBodySize - Maximum request body size for WAF.
5033	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
5034	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
5035	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
5036	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
5037	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
5038	// Exclusions - The exclusion list.
5039	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
5040}
5041
5042// ApplicationRuleCondition rule condition of type application.
5043type ApplicationRuleCondition struct {
5044	// SourceAddresses - List of source IP addresses for this rule.
5045	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
5046	// DestinationAddresses - List of destination IP addresses or Service Tags.
5047	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
5048	// Protocols - Array of Application Protocols.
5049	Protocols *[]FirewallPolicyRuleConditionApplicationProtocol `json:"protocols,omitempty"`
5050	// TargetFqdns - List of FQDNs for this rule condition.
5051	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
5052	// FqdnTags - List of FQDN Tags for this rule condition.
5053	FqdnTags *[]string `json:"fqdnTags,omitempty"`
5054	// Name - Name of the rule condition.
5055	Name *string `json:"name,omitempty"`
5056	// Description - Description of the rule condition.
5057	Description *string `json:"description,omitempty"`
5058	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
5059	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
5060}
5061
5062// MarshalJSON is the custom marshaler for ApplicationRuleCondition.
5063func (arc ApplicationRuleCondition) MarshalJSON() ([]byte, error) {
5064	arc.RuleConditionType = RuleConditionTypeApplicationRuleCondition
5065	objectMap := make(map[string]interface{})
5066	if arc.SourceAddresses != nil {
5067		objectMap["sourceAddresses"] = arc.SourceAddresses
5068	}
5069	if arc.DestinationAddresses != nil {
5070		objectMap["destinationAddresses"] = arc.DestinationAddresses
5071	}
5072	if arc.Protocols != nil {
5073		objectMap["protocols"] = arc.Protocols
5074	}
5075	if arc.TargetFqdns != nil {
5076		objectMap["targetFqdns"] = arc.TargetFqdns
5077	}
5078	if arc.FqdnTags != nil {
5079		objectMap["fqdnTags"] = arc.FqdnTags
5080	}
5081	if arc.Name != nil {
5082		objectMap["name"] = arc.Name
5083	}
5084	if arc.Description != nil {
5085		objectMap["description"] = arc.Description
5086	}
5087	if arc.RuleConditionType != "" {
5088		objectMap["ruleConditionType"] = arc.RuleConditionType
5089	}
5090	return json.Marshal(objectMap)
5091}
5092
5093// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5094func (arc ApplicationRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
5095	return &arc, true
5096}
5097
5098// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5099func (arc ApplicationRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
5100	return nil, false
5101}
5102
5103// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5104func (arc ApplicationRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
5105	return nil, false
5106}
5107
5108// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
5109func (arc ApplicationRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
5110	return &arc, true
5111}
5112
5113// ApplicationSecurityGroup an application security group in a resource group.
5114type ApplicationSecurityGroup struct {
5115	autorest.Response `json:"-"`
5116	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
5117	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
5118	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
5119	Etag *string `json:"etag,omitempty"`
5120	// ID - Resource ID.
5121	ID *string `json:"id,omitempty"`
5122	// Name - READ-ONLY; Resource name.
5123	Name *string `json:"name,omitempty"`
5124	// Type - READ-ONLY; Resource type.
5125	Type *string `json:"type,omitempty"`
5126	// Location - Resource location.
5127	Location *string `json:"location,omitempty"`
5128	// Tags - Resource tags.
5129	Tags map[string]*string `json:"tags"`
5130}
5131
5132// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
5133func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
5134	objectMap := make(map[string]interface{})
5135	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
5136		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
5137	}
5138	if asg.ID != nil {
5139		objectMap["id"] = asg.ID
5140	}
5141	if asg.Location != nil {
5142		objectMap["location"] = asg.Location
5143	}
5144	if asg.Tags != nil {
5145		objectMap["tags"] = asg.Tags
5146	}
5147	return json.Marshal(objectMap)
5148}
5149
5150// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
5151func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
5152	var m map[string]*json.RawMessage
5153	err := json.Unmarshal(body, &m)
5154	if err != nil {
5155		return err
5156	}
5157	for k, v := range m {
5158		switch k {
5159		case "properties":
5160			if v != nil {
5161				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
5162				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
5163				if err != nil {
5164					return err
5165				}
5166				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
5167			}
5168		case "etag":
5169			if v != nil {
5170				var etag string
5171				err = json.Unmarshal(*v, &etag)
5172				if err != nil {
5173					return err
5174				}
5175				asg.Etag = &etag
5176			}
5177		case "id":
5178			if v != nil {
5179				var ID string
5180				err = json.Unmarshal(*v, &ID)
5181				if err != nil {
5182					return err
5183				}
5184				asg.ID = &ID
5185			}
5186		case "name":
5187			if v != nil {
5188				var name string
5189				err = json.Unmarshal(*v, &name)
5190				if err != nil {
5191					return err
5192				}
5193				asg.Name = &name
5194			}
5195		case "type":
5196			if v != nil {
5197				var typeVar string
5198				err = json.Unmarshal(*v, &typeVar)
5199				if err != nil {
5200					return err
5201				}
5202				asg.Type = &typeVar
5203			}
5204		case "location":
5205			if v != nil {
5206				var location string
5207				err = json.Unmarshal(*v, &location)
5208				if err != nil {
5209					return err
5210				}
5211				asg.Location = &location
5212			}
5213		case "tags":
5214			if v != nil {
5215				var tags map[string]*string
5216				err = json.Unmarshal(*v, &tags)
5217				if err != nil {
5218					return err
5219				}
5220				asg.Tags = tags
5221			}
5222		}
5223	}
5224
5225	return nil
5226}
5227
5228// ApplicationSecurityGroupListResult a list of application security groups.
5229type ApplicationSecurityGroupListResult struct {
5230	autorest.Response `json:"-"`
5231	// Value - A list of application security groups.
5232	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
5233	// NextLink - READ-ONLY; The URL to get the next set of results.
5234	NextLink *string `json:"nextLink,omitempty"`
5235}
5236
5237// ApplicationSecurityGroupListResultIterator provides access to a complete listing of
5238// ApplicationSecurityGroup values.
5239type ApplicationSecurityGroupListResultIterator struct {
5240	i    int
5241	page ApplicationSecurityGroupListResultPage
5242}
5243
5244// NextWithContext advances to the next value.  If there was an error making
5245// the request the iterator does not advance and the error is returned.
5246func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
5247	if tracing.IsEnabled() {
5248		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
5249		defer func() {
5250			sc := -1
5251			if iter.Response().Response.Response != nil {
5252				sc = iter.Response().Response.Response.StatusCode
5253			}
5254			tracing.EndSpan(ctx, sc, err)
5255		}()
5256	}
5257	iter.i++
5258	if iter.i < len(iter.page.Values()) {
5259		return nil
5260	}
5261	err = iter.page.NextWithContext(ctx)
5262	if err != nil {
5263		iter.i--
5264		return err
5265	}
5266	iter.i = 0
5267	return nil
5268}
5269
5270// Next advances to the next value.  If there was an error making
5271// the request the iterator does not advance and the error is returned.
5272// Deprecated: Use NextWithContext() instead.
5273func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
5274	return iter.NextWithContext(context.Background())
5275}
5276
5277// NotDone returns true if the enumeration should be started or is not yet complete.
5278func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
5279	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5280}
5281
5282// Response returns the raw server response from the last page request.
5283func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
5284	return iter.page.Response()
5285}
5286
5287// Value returns the current value or a zero-initialized value if the
5288// iterator has advanced beyond the end of the collection.
5289func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
5290	if !iter.page.NotDone() {
5291		return ApplicationSecurityGroup{}
5292	}
5293	return iter.page.Values()[iter.i]
5294}
5295
5296// Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
5297func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
5298	return ApplicationSecurityGroupListResultIterator{page: page}
5299}
5300
5301// IsEmpty returns true if the ListResult contains no values.
5302func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
5303	return asglr.Value == nil || len(*asglr.Value) == 0
5304}
5305
5306// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
5307// It returns nil if no more results exist.
5308func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
5309	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
5310		return nil, nil
5311	}
5312	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5313		autorest.AsJSON(),
5314		autorest.AsGet(),
5315		autorest.WithBaseURL(to.String(asglr.NextLink)))
5316}
5317
5318// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
5319type ApplicationSecurityGroupListResultPage struct {
5320	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
5321	asglr ApplicationSecurityGroupListResult
5322}
5323
5324// NextWithContext advances to the next page of values.  If there was an error making
5325// the request the page does not advance and the error is returned.
5326func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
5327	if tracing.IsEnabled() {
5328		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
5329		defer func() {
5330			sc := -1
5331			if page.Response().Response.Response != nil {
5332				sc = page.Response().Response.Response.StatusCode
5333			}
5334			tracing.EndSpan(ctx, sc, err)
5335		}()
5336	}
5337	next, err := page.fn(ctx, page.asglr)
5338	if err != nil {
5339		return err
5340	}
5341	page.asglr = next
5342	return nil
5343}
5344
5345// Next advances to the next page of values.  If there was an error making
5346// the request the page does not advance and the error is returned.
5347// Deprecated: Use NextWithContext() instead.
5348func (page *ApplicationSecurityGroupListResultPage) Next() error {
5349	return page.NextWithContext(context.Background())
5350}
5351
5352// NotDone returns true if the page enumeration should be started or is not yet complete.
5353func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
5354	return !page.asglr.IsEmpty()
5355}
5356
5357// Response returns the raw server response from the last page request.
5358func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
5359	return page.asglr
5360}
5361
5362// Values returns the slice of values for the current page or nil if there are no values.
5363func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
5364	if page.asglr.IsEmpty() {
5365		return nil
5366	}
5367	return *page.asglr.Value
5368}
5369
5370// Creates a new instance of the ApplicationSecurityGroupListResultPage type.
5371func NewApplicationSecurityGroupListResultPage(getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
5372	return ApplicationSecurityGroupListResultPage{fn: getNextPage}
5373}
5374
5375// ApplicationSecurityGroupPropertiesFormat application security group properties.
5376type ApplicationSecurityGroupPropertiesFormat struct {
5377	// 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.
5378	ResourceGUID *string `json:"resourceGuid,omitempty"`
5379	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5380	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5381}
5382
5383// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
5384// of a long-running operation.
5385type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
5386	azure.Future
5387}
5388
5389// Result returns the result of the asynchronous operation.
5390// If the operation has not completed it will return an error.
5391func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5392	var done bool
5393	done, err = future.DoneWithContext(context.Background(), client)
5394	if err != nil {
5395		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5396		return
5397	}
5398	if !done {
5399		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
5400		return
5401	}
5402	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5403	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5404		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
5405		if err != nil {
5406			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
5407		}
5408	}
5409	return
5410}
5411
5412// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
5413// long-running operation.
5414type ApplicationSecurityGroupsDeleteFuture struct {
5415	azure.Future
5416}
5417
5418// Result returns the result of the asynchronous operation.
5419// If the operation has not completed it will return an error.
5420func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
5421	var done bool
5422	done, err = future.DoneWithContext(context.Background(), client)
5423	if err != nil {
5424		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
5425		return
5426	}
5427	if !done {
5428		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
5429		return
5430	}
5431	ar.Response = future.Response()
5432	return
5433}
5434
5435// ApplicationSecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
5436// long-running operation.
5437type ApplicationSecurityGroupsUpdateTagsFuture struct {
5438	azure.Future
5439}
5440
5441// Result returns the result of the asynchronous operation.
5442// If the operation has not completed it will return an error.
5443func (future *ApplicationSecurityGroupsUpdateTagsFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
5444	var done bool
5445	done, err = future.DoneWithContext(context.Background(), client)
5446	if err != nil {
5447		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
5448		return
5449	}
5450	if !done {
5451		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsUpdateTagsFuture")
5452		return
5453	}
5454	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5455	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
5456		asg, err = client.UpdateTagsResponder(asg.Response.Response)
5457		if err != nil {
5458			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsUpdateTagsFuture", "Result", asg.Response.Response, "Failure responding to request")
5459		}
5460	}
5461	return
5462}
5463
5464// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
5465// that belongs to an ExpressRouteCircuit.
5466type AuthorizationListResult struct {
5467	autorest.Response `json:"-"`
5468	// Value - The authorizations in an ExpressRoute Circuit.
5469	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
5470	// NextLink - The URL to get the next set of results.
5471	NextLink *string `json:"nextLink,omitempty"`
5472}
5473
5474// AuthorizationListResultIterator provides access to a complete listing of
5475// ExpressRouteCircuitAuthorization values.
5476type AuthorizationListResultIterator struct {
5477	i    int
5478	page AuthorizationListResultPage
5479}
5480
5481// NextWithContext advances to the next value.  If there was an error making
5482// the request the iterator does not advance and the error is returned.
5483func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
5484	if tracing.IsEnabled() {
5485		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
5486		defer func() {
5487			sc := -1
5488			if iter.Response().Response.Response != nil {
5489				sc = iter.Response().Response.Response.StatusCode
5490			}
5491			tracing.EndSpan(ctx, sc, err)
5492		}()
5493	}
5494	iter.i++
5495	if iter.i < len(iter.page.Values()) {
5496		return nil
5497	}
5498	err = iter.page.NextWithContext(ctx)
5499	if err != nil {
5500		iter.i--
5501		return err
5502	}
5503	iter.i = 0
5504	return nil
5505}
5506
5507// Next advances to the next value.  If there was an error making
5508// the request the iterator does not advance and the error is returned.
5509// Deprecated: Use NextWithContext() instead.
5510func (iter *AuthorizationListResultIterator) Next() error {
5511	return iter.NextWithContext(context.Background())
5512}
5513
5514// NotDone returns true if the enumeration should be started or is not yet complete.
5515func (iter AuthorizationListResultIterator) NotDone() bool {
5516	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5517}
5518
5519// Response returns the raw server response from the last page request.
5520func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
5521	return iter.page.Response()
5522}
5523
5524// Value returns the current value or a zero-initialized value if the
5525// iterator has advanced beyond the end of the collection.
5526func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
5527	if !iter.page.NotDone() {
5528		return ExpressRouteCircuitAuthorization{}
5529	}
5530	return iter.page.Values()[iter.i]
5531}
5532
5533// Creates a new instance of the AuthorizationListResultIterator type.
5534func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
5535	return AuthorizationListResultIterator{page: page}
5536}
5537
5538// IsEmpty returns true if the ListResult contains no values.
5539func (alr AuthorizationListResult) IsEmpty() bool {
5540	return alr.Value == nil || len(*alr.Value) == 0
5541}
5542
5543// authorizationListResultPreparer prepares a request to retrieve the next set of results.
5544// It returns nil if no more results exist.
5545func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
5546	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
5547		return nil, nil
5548	}
5549	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5550		autorest.AsJSON(),
5551		autorest.AsGet(),
5552		autorest.WithBaseURL(to.String(alr.NextLink)))
5553}
5554
5555// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
5556type AuthorizationListResultPage struct {
5557	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
5558	alr AuthorizationListResult
5559}
5560
5561// NextWithContext advances to the next page of values.  If there was an error making
5562// the request the page does not advance and the error is returned.
5563func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
5564	if tracing.IsEnabled() {
5565		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
5566		defer func() {
5567			sc := -1
5568			if page.Response().Response.Response != nil {
5569				sc = page.Response().Response.Response.StatusCode
5570			}
5571			tracing.EndSpan(ctx, sc, err)
5572		}()
5573	}
5574	next, err := page.fn(ctx, page.alr)
5575	if err != nil {
5576		return err
5577	}
5578	page.alr = next
5579	return nil
5580}
5581
5582// Next advances to the next page of values.  If there was an error making
5583// the request the page does not advance and the error is returned.
5584// Deprecated: Use NextWithContext() instead.
5585func (page *AuthorizationListResultPage) Next() error {
5586	return page.NextWithContext(context.Background())
5587}
5588
5589// NotDone returns true if the page enumeration should be started or is not yet complete.
5590func (page AuthorizationListResultPage) NotDone() bool {
5591	return !page.alr.IsEmpty()
5592}
5593
5594// Response returns the raw server response from the last page request.
5595func (page AuthorizationListResultPage) Response() AuthorizationListResult {
5596	return page.alr
5597}
5598
5599// Values returns the slice of values for the current page or nil if there are no values.
5600func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
5601	if page.alr.IsEmpty() {
5602		return nil
5603	}
5604	return *page.alr.Value
5605}
5606
5607// Creates a new instance of the AuthorizationListResultPage type.
5608func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
5609	return AuthorizationListResultPage{fn: getNextPage}
5610}
5611
5612// AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
5613type AuthorizationPropertiesFormat struct {
5614	// AuthorizationKey - The authorization key.
5615	AuthorizationKey *string `json:"authorizationKey,omitempty"`
5616	// AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse'
5617	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
5618	// ProvisioningState - The provisioning state of the authorization resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
5619	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
5620}
5621
5622// AutoApprovedPrivateLinkService the information of an AutoApprovedPrivateLinkService.
5623type AutoApprovedPrivateLinkService struct {
5624	// PrivateLinkService - The id of the private link service resource.
5625	PrivateLinkService *string `json:"privateLinkService,omitempty"`
5626}
5627
5628// AutoApprovedPrivateLinkServicesResult an array of private link service id that can be linked to a
5629// private end point with auto approved.
5630type AutoApprovedPrivateLinkServicesResult struct {
5631	autorest.Response `json:"-"`
5632	// Value - An array of auto approved private link service.
5633	Value *[]AutoApprovedPrivateLinkService `json:"value,omitempty"`
5634	// NextLink - READ-ONLY; The URL to get the next set of results.
5635	NextLink *string `json:"nextLink,omitempty"`
5636}
5637
5638// AutoApprovedPrivateLinkServicesResultIterator provides access to a complete listing of
5639// AutoApprovedPrivateLinkService values.
5640type AutoApprovedPrivateLinkServicesResultIterator struct {
5641	i    int
5642	page AutoApprovedPrivateLinkServicesResultPage
5643}
5644
5645// NextWithContext advances to the next value.  If there was an error making
5646// the request the iterator does not advance and the error is returned.
5647func (iter *AutoApprovedPrivateLinkServicesResultIterator) NextWithContext(ctx context.Context) (err error) {
5648	if tracing.IsEnabled() {
5649		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultIterator.NextWithContext")
5650		defer func() {
5651			sc := -1
5652			if iter.Response().Response.Response != nil {
5653				sc = iter.Response().Response.Response.StatusCode
5654			}
5655			tracing.EndSpan(ctx, sc, err)
5656		}()
5657	}
5658	iter.i++
5659	if iter.i < len(iter.page.Values()) {
5660		return nil
5661	}
5662	err = iter.page.NextWithContext(ctx)
5663	if err != nil {
5664		iter.i--
5665		return err
5666	}
5667	iter.i = 0
5668	return nil
5669}
5670
5671// Next advances to the next value.  If there was an error making
5672// the request the iterator does not advance and the error is returned.
5673// Deprecated: Use NextWithContext() instead.
5674func (iter *AutoApprovedPrivateLinkServicesResultIterator) Next() error {
5675	return iter.NextWithContext(context.Background())
5676}
5677
5678// NotDone returns true if the enumeration should be started or is not yet complete.
5679func (iter AutoApprovedPrivateLinkServicesResultIterator) NotDone() bool {
5680	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5681}
5682
5683// Response returns the raw server response from the last page request.
5684func (iter AutoApprovedPrivateLinkServicesResultIterator) Response() AutoApprovedPrivateLinkServicesResult {
5685	return iter.page.Response()
5686}
5687
5688// Value returns the current value or a zero-initialized value if the
5689// iterator has advanced beyond the end of the collection.
5690func (iter AutoApprovedPrivateLinkServicesResultIterator) Value() AutoApprovedPrivateLinkService {
5691	if !iter.page.NotDone() {
5692		return AutoApprovedPrivateLinkService{}
5693	}
5694	return iter.page.Values()[iter.i]
5695}
5696
5697// Creates a new instance of the AutoApprovedPrivateLinkServicesResultIterator type.
5698func NewAutoApprovedPrivateLinkServicesResultIterator(page AutoApprovedPrivateLinkServicesResultPage) AutoApprovedPrivateLinkServicesResultIterator {
5699	return AutoApprovedPrivateLinkServicesResultIterator{page: page}
5700}
5701
5702// IsEmpty returns true if the ListResult contains no values.
5703func (aaplsr AutoApprovedPrivateLinkServicesResult) IsEmpty() bool {
5704	return aaplsr.Value == nil || len(*aaplsr.Value) == 0
5705}
5706
5707// autoApprovedPrivateLinkServicesResultPreparer prepares a request to retrieve the next set of results.
5708// It returns nil if no more results exist.
5709func (aaplsr AutoApprovedPrivateLinkServicesResult) autoApprovedPrivateLinkServicesResultPreparer(ctx context.Context) (*http.Request, error) {
5710	if aaplsr.NextLink == nil || len(to.String(aaplsr.NextLink)) < 1 {
5711		return nil, nil
5712	}
5713	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5714		autorest.AsJSON(),
5715		autorest.AsGet(),
5716		autorest.WithBaseURL(to.String(aaplsr.NextLink)))
5717}
5718
5719// AutoApprovedPrivateLinkServicesResultPage contains a page of AutoApprovedPrivateLinkService values.
5720type AutoApprovedPrivateLinkServicesResultPage struct {
5721	fn     func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)
5722	aaplsr AutoApprovedPrivateLinkServicesResult
5723}
5724
5725// NextWithContext advances to the next page of values.  If there was an error making
5726// the request the page does not advance and the error is returned.
5727func (page *AutoApprovedPrivateLinkServicesResultPage) NextWithContext(ctx context.Context) (err error) {
5728	if tracing.IsEnabled() {
5729		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultPage.NextWithContext")
5730		defer func() {
5731			sc := -1
5732			if page.Response().Response.Response != nil {
5733				sc = page.Response().Response.Response.StatusCode
5734			}
5735			tracing.EndSpan(ctx, sc, err)
5736		}()
5737	}
5738	next, err := page.fn(ctx, page.aaplsr)
5739	if err != nil {
5740		return err
5741	}
5742	page.aaplsr = next
5743	return nil
5744}
5745
5746// Next advances to the next page of values.  If there was an error making
5747// the request the page does not advance and the error is returned.
5748// Deprecated: Use NextWithContext() instead.
5749func (page *AutoApprovedPrivateLinkServicesResultPage) Next() error {
5750	return page.NextWithContext(context.Background())
5751}
5752
5753// NotDone returns true if the page enumeration should be started or is not yet complete.
5754func (page AutoApprovedPrivateLinkServicesResultPage) NotDone() bool {
5755	return !page.aaplsr.IsEmpty()
5756}
5757
5758// Response returns the raw server response from the last page request.
5759func (page AutoApprovedPrivateLinkServicesResultPage) Response() AutoApprovedPrivateLinkServicesResult {
5760	return page.aaplsr
5761}
5762
5763// Values returns the slice of values for the current page or nil if there are no values.
5764func (page AutoApprovedPrivateLinkServicesResultPage) Values() []AutoApprovedPrivateLinkService {
5765	if page.aaplsr.IsEmpty() {
5766		return nil
5767	}
5768	return *page.aaplsr.Value
5769}
5770
5771// Creates a new instance of the AutoApprovedPrivateLinkServicesResultPage type.
5772func NewAutoApprovedPrivateLinkServicesResultPage(getNextPage func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)) AutoApprovedPrivateLinkServicesResultPage {
5773	return AutoApprovedPrivateLinkServicesResultPage{fn: getNextPage}
5774}
5775
5776// Availability availability of the metric.
5777type Availability struct {
5778	// TimeGrain - The time grain of the availability.
5779	TimeGrain *string `json:"timeGrain,omitempty"`
5780	// Retention - The retention of the availability.
5781	Retention *string `json:"retention,omitempty"`
5782	// BlobDuration - Duration of the availability blob.
5783	BlobDuration *string `json:"blobDuration,omitempty"`
5784}
5785
5786// AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
5787// subnet.
5788type AvailableDelegation struct {
5789	// Name - The name of the AvailableDelegation resource.
5790	Name *string `json:"name,omitempty"`
5791	// ID - A unique identifier of the AvailableDelegation resource.
5792	ID *string `json:"id,omitempty"`
5793	// Type - Resource type.
5794	Type *string `json:"type,omitempty"`
5795	// ServiceName - The name of the service and resource.
5796	ServiceName *string `json:"serviceName,omitempty"`
5797	// Actions - Describes the actions permitted to the service upon delegation.
5798	Actions *[]string `json:"actions,omitempty"`
5799}
5800
5801// AvailableDelegationsResult an array of available delegations.
5802type AvailableDelegationsResult struct {
5803	autorest.Response `json:"-"`
5804	// Value - An array of available delegations.
5805	Value *[]AvailableDelegation `json:"value,omitempty"`
5806	// NextLink - READ-ONLY; The URL to get the next set of results.
5807	NextLink *string `json:"nextLink,omitempty"`
5808}
5809
5810// AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
5811type AvailableDelegationsResultIterator struct {
5812	i    int
5813	page AvailableDelegationsResultPage
5814}
5815
5816// NextWithContext advances to the next value.  If there was an error making
5817// the request the iterator does not advance and the error is returned.
5818func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
5819	if tracing.IsEnabled() {
5820		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
5821		defer func() {
5822			sc := -1
5823			if iter.Response().Response.Response != nil {
5824				sc = iter.Response().Response.Response.StatusCode
5825			}
5826			tracing.EndSpan(ctx, sc, err)
5827		}()
5828	}
5829	iter.i++
5830	if iter.i < len(iter.page.Values()) {
5831		return nil
5832	}
5833	err = iter.page.NextWithContext(ctx)
5834	if err != nil {
5835		iter.i--
5836		return err
5837	}
5838	iter.i = 0
5839	return nil
5840}
5841
5842// Next advances to the next value.  If there was an error making
5843// the request the iterator does not advance and the error is returned.
5844// Deprecated: Use NextWithContext() instead.
5845func (iter *AvailableDelegationsResultIterator) Next() error {
5846	return iter.NextWithContext(context.Background())
5847}
5848
5849// NotDone returns true if the enumeration should be started or is not yet complete.
5850func (iter AvailableDelegationsResultIterator) NotDone() bool {
5851	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5852}
5853
5854// Response returns the raw server response from the last page request.
5855func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
5856	return iter.page.Response()
5857}
5858
5859// Value returns the current value or a zero-initialized value if the
5860// iterator has advanced beyond the end of the collection.
5861func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
5862	if !iter.page.NotDone() {
5863		return AvailableDelegation{}
5864	}
5865	return iter.page.Values()[iter.i]
5866}
5867
5868// Creates a new instance of the AvailableDelegationsResultIterator type.
5869func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
5870	return AvailableDelegationsResultIterator{page: page}
5871}
5872
5873// IsEmpty returns true if the ListResult contains no values.
5874func (adr AvailableDelegationsResult) IsEmpty() bool {
5875	return adr.Value == nil || len(*adr.Value) == 0
5876}
5877
5878// availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
5879// It returns nil if no more results exist.
5880func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
5881	if adr.NextLink == nil || len(to.String(adr.NextLink)) < 1 {
5882		return nil, nil
5883	}
5884	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5885		autorest.AsJSON(),
5886		autorest.AsGet(),
5887		autorest.WithBaseURL(to.String(adr.NextLink)))
5888}
5889
5890// AvailableDelegationsResultPage contains a page of AvailableDelegation values.
5891type AvailableDelegationsResultPage struct {
5892	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
5893	adr AvailableDelegationsResult
5894}
5895
5896// NextWithContext advances to the next page of values.  If there was an error making
5897// the request the page does not advance and the error is returned.
5898func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
5899	if tracing.IsEnabled() {
5900		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
5901		defer func() {
5902			sc := -1
5903			if page.Response().Response.Response != nil {
5904				sc = page.Response().Response.Response.StatusCode
5905			}
5906			tracing.EndSpan(ctx, sc, err)
5907		}()
5908	}
5909	next, err := page.fn(ctx, page.adr)
5910	if err != nil {
5911		return err
5912	}
5913	page.adr = next
5914	return nil
5915}
5916
5917// Next advances to the next page of values.  If there was an error making
5918// the request the page does not advance and the error is returned.
5919// Deprecated: Use NextWithContext() instead.
5920func (page *AvailableDelegationsResultPage) Next() error {
5921	return page.NextWithContext(context.Background())
5922}
5923
5924// NotDone returns true if the page enumeration should be started or is not yet complete.
5925func (page AvailableDelegationsResultPage) NotDone() bool {
5926	return !page.adr.IsEmpty()
5927}
5928
5929// Response returns the raw server response from the last page request.
5930func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
5931	return page.adr
5932}
5933
5934// Values returns the slice of values for the current page or nil if there are no values.
5935func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
5936	if page.adr.IsEmpty() {
5937		return nil
5938	}
5939	return *page.adr.Value
5940}
5941
5942// Creates a new instance of the AvailableDelegationsResultPage type.
5943func NewAvailableDelegationsResultPage(getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
5944	return AvailableDelegationsResultPage{fn: getNextPage}
5945}
5946
5947// AvailablePrivateEndpointType the information of an AvailablePrivateEndpointType.
5948type AvailablePrivateEndpointType struct {
5949	// Name - The name of the service and resource.
5950	Name *string `json:"name,omitempty"`
5951	// ID - A unique identifier of the AvailablePrivateEndpoint Type resource.
5952	ID *string `json:"id,omitempty"`
5953	// Type - Resource type.
5954	Type *string `json:"type,omitempty"`
5955	// ResourceName - The name of the service and resource.
5956	ResourceName *string `json:"resourceName,omitempty"`
5957}
5958
5959// AvailablePrivateEndpointTypesResult an array of available PrivateEndpoint types.
5960type AvailablePrivateEndpointTypesResult struct {
5961	autorest.Response `json:"-"`
5962	// Value - An array of available privateEndpoint type.
5963	Value *[]AvailablePrivateEndpointType `json:"value,omitempty"`
5964	// NextLink - READ-ONLY; The URL to get the next set of results.
5965	NextLink *string `json:"nextLink,omitempty"`
5966}
5967
5968// AvailablePrivateEndpointTypesResultIterator provides access to a complete listing of
5969// AvailablePrivateEndpointType values.
5970type AvailablePrivateEndpointTypesResultIterator struct {
5971	i    int
5972	page AvailablePrivateEndpointTypesResultPage
5973}
5974
5975// NextWithContext advances to the next value.  If there was an error making
5976// the request the iterator does not advance and the error is returned.
5977func (iter *AvailablePrivateEndpointTypesResultIterator) NextWithContext(ctx context.Context) (err error) {
5978	if tracing.IsEnabled() {
5979		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultIterator.NextWithContext")
5980		defer func() {
5981			sc := -1
5982			if iter.Response().Response.Response != nil {
5983				sc = iter.Response().Response.Response.StatusCode
5984			}
5985			tracing.EndSpan(ctx, sc, err)
5986		}()
5987	}
5988	iter.i++
5989	if iter.i < len(iter.page.Values()) {
5990		return nil
5991	}
5992	err = iter.page.NextWithContext(ctx)
5993	if err != nil {
5994		iter.i--
5995		return err
5996	}
5997	iter.i = 0
5998	return nil
5999}
6000
6001// Next advances to the next value.  If there was an error making
6002// the request the iterator does not advance and the error is returned.
6003// Deprecated: Use NextWithContext() instead.
6004func (iter *AvailablePrivateEndpointTypesResultIterator) Next() error {
6005	return iter.NextWithContext(context.Background())
6006}
6007
6008// NotDone returns true if the enumeration should be started or is not yet complete.
6009func (iter AvailablePrivateEndpointTypesResultIterator) NotDone() bool {
6010	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6011}
6012
6013// Response returns the raw server response from the last page request.
6014func (iter AvailablePrivateEndpointTypesResultIterator) Response() AvailablePrivateEndpointTypesResult {
6015	return iter.page.Response()
6016}
6017
6018// Value returns the current value or a zero-initialized value if the
6019// iterator has advanced beyond the end of the collection.
6020func (iter AvailablePrivateEndpointTypesResultIterator) Value() AvailablePrivateEndpointType {
6021	if !iter.page.NotDone() {
6022		return AvailablePrivateEndpointType{}
6023	}
6024	return iter.page.Values()[iter.i]
6025}
6026
6027// Creates a new instance of the AvailablePrivateEndpointTypesResultIterator type.
6028func NewAvailablePrivateEndpointTypesResultIterator(page AvailablePrivateEndpointTypesResultPage) AvailablePrivateEndpointTypesResultIterator {
6029	return AvailablePrivateEndpointTypesResultIterator{page: page}
6030}
6031
6032// IsEmpty returns true if the ListResult contains no values.
6033func (apetr AvailablePrivateEndpointTypesResult) IsEmpty() bool {
6034	return apetr.Value == nil || len(*apetr.Value) == 0
6035}
6036
6037// availablePrivateEndpointTypesResultPreparer prepares a request to retrieve the next set of results.
6038// It returns nil if no more results exist.
6039func (apetr AvailablePrivateEndpointTypesResult) availablePrivateEndpointTypesResultPreparer(ctx context.Context) (*http.Request, error) {
6040	if apetr.NextLink == nil || len(to.String(apetr.NextLink)) < 1 {
6041		return nil, nil
6042	}
6043	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6044		autorest.AsJSON(),
6045		autorest.AsGet(),
6046		autorest.WithBaseURL(to.String(apetr.NextLink)))
6047}
6048
6049// AvailablePrivateEndpointTypesResultPage contains a page of AvailablePrivateEndpointType values.
6050type AvailablePrivateEndpointTypesResultPage struct {
6051	fn    func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)
6052	apetr AvailablePrivateEndpointTypesResult
6053}
6054
6055// NextWithContext advances to the next page of values.  If there was an error making
6056// the request the page does not advance and the error is returned.
6057func (page *AvailablePrivateEndpointTypesResultPage) NextWithContext(ctx context.Context) (err error) {
6058	if tracing.IsEnabled() {
6059		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultPage.NextWithContext")
6060		defer func() {
6061			sc := -1
6062			if page.Response().Response.Response != nil {
6063				sc = page.Response().Response.Response.StatusCode
6064			}
6065			tracing.EndSpan(ctx, sc, err)
6066		}()
6067	}
6068	next, err := page.fn(ctx, page.apetr)
6069	if err != nil {
6070		return err
6071	}
6072	page.apetr = next
6073	return nil
6074}
6075
6076// Next advances to the next page of values.  If there was an error making
6077// the request the page does not advance and the error is returned.
6078// Deprecated: Use NextWithContext() instead.
6079func (page *AvailablePrivateEndpointTypesResultPage) Next() error {
6080	return page.NextWithContext(context.Background())
6081}
6082
6083// NotDone returns true if the page enumeration should be started or is not yet complete.
6084func (page AvailablePrivateEndpointTypesResultPage) NotDone() bool {
6085	return !page.apetr.IsEmpty()
6086}
6087
6088// Response returns the raw server response from the last page request.
6089func (page AvailablePrivateEndpointTypesResultPage) Response() AvailablePrivateEndpointTypesResult {
6090	return page.apetr
6091}
6092
6093// Values returns the slice of values for the current page or nil if there are no values.
6094func (page AvailablePrivateEndpointTypesResultPage) Values() []AvailablePrivateEndpointType {
6095	if page.apetr.IsEmpty() {
6096		return nil
6097	}
6098	return *page.apetr.Value
6099}
6100
6101// Creates a new instance of the AvailablePrivateEndpointTypesResultPage type.
6102func NewAvailablePrivateEndpointTypesResultPage(getNextPage func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)) AvailablePrivateEndpointTypesResultPage {
6103	return AvailablePrivateEndpointTypesResultPage{fn: getNextPage}
6104}
6105
6106// AvailableProvidersList list of available countries with details.
6107type AvailableProvidersList struct {
6108	autorest.Response `json:"-"`
6109	// Countries - List of available countries.
6110	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
6111}
6112
6113// AvailableProvidersListCity city or town details.
6114type AvailableProvidersListCity struct {
6115	// CityName - The city or town name.
6116	CityName *string `json:"cityName,omitempty"`
6117	// Providers - A list of Internet service providers.
6118	Providers *[]string `json:"providers,omitempty"`
6119}
6120
6121// AvailableProvidersListCountry country details.
6122type AvailableProvidersListCountry struct {
6123	// CountryName - The country name.
6124	CountryName *string `json:"countryName,omitempty"`
6125	// Providers - A list of Internet service providers.
6126	Providers *[]string `json:"providers,omitempty"`
6127	// States - List of available states in the country.
6128	States *[]AvailableProvidersListState `json:"states,omitempty"`
6129}
6130
6131// AvailableProvidersListParameters constraints that determine the list of available Internet service
6132// providers.
6133type AvailableProvidersListParameters struct {
6134	// AzureLocations - A list of Azure regions.
6135	AzureLocations *[]string `json:"azureLocations,omitempty"`
6136	// Country - The country for available providers list.
6137	Country *string `json:"country,omitempty"`
6138	// State - The state for available providers list.
6139	State *string `json:"state,omitempty"`
6140	// City - The city or town for available providers list.
6141	City *string `json:"city,omitempty"`
6142}
6143
6144// AvailableProvidersListState state details.
6145type AvailableProvidersListState struct {
6146	// StateName - The state name.
6147	StateName *string `json:"stateName,omitempty"`
6148	// Providers - A list of Internet service providers.
6149	Providers *[]string `json:"providers,omitempty"`
6150	// Cities - List of available cities or towns in the state.
6151	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
6152}
6153
6154// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
6155// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
6156// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
6157// operation succeeded, the response body includes the HTTP status code for the successful request. If the
6158// asynchronous operation failed, the response body includes the HTTP status code for the failed request
6159// and error information regarding the failure.
6160type AzureAsyncOperationResult struct {
6161	// Status - Status of the Azure async operation. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
6162	Status OperationStatus `json:"status,omitempty"`
6163	// Error - Details of the error occurred during specified asynchronous operation.
6164	Error *Error `json:"error,omitempty"`
6165}
6166
6167// AzureFirewall azure Firewall resource.
6168type AzureFirewall struct {
6169	autorest.Response `json:"-"`
6170	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
6171	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
6172	// Zones - A list of availability zones denoting where the resource needs to come from.
6173	Zones *[]string `json:"zones,omitempty"`
6174	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6175	Etag *string `json:"etag,omitempty"`
6176	// ID - Resource ID.
6177	ID *string `json:"id,omitempty"`
6178	// Name - READ-ONLY; Resource name.
6179	Name *string `json:"name,omitempty"`
6180	// Type - READ-ONLY; Resource type.
6181	Type *string `json:"type,omitempty"`
6182	// Location - Resource location.
6183	Location *string `json:"location,omitempty"`
6184	// Tags - Resource tags.
6185	Tags map[string]*string `json:"tags"`
6186}
6187
6188// MarshalJSON is the custom marshaler for AzureFirewall.
6189func (af AzureFirewall) MarshalJSON() ([]byte, error) {
6190	objectMap := make(map[string]interface{})
6191	if af.AzureFirewallPropertiesFormat != nil {
6192		objectMap["properties"] = af.AzureFirewallPropertiesFormat
6193	}
6194	if af.Zones != nil {
6195		objectMap["zones"] = af.Zones
6196	}
6197	if af.ID != nil {
6198		objectMap["id"] = af.ID
6199	}
6200	if af.Location != nil {
6201		objectMap["location"] = af.Location
6202	}
6203	if af.Tags != nil {
6204		objectMap["tags"] = af.Tags
6205	}
6206	return json.Marshal(objectMap)
6207}
6208
6209// UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
6210func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
6211	var m map[string]*json.RawMessage
6212	err := json.Unmarshal(body, &m)
6213	if err != nil {
6214		return err
6215	}
6216	for k, v := range m {
6217		switch k {
6218		case "properties":
6219			if v != nil {
6220				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
6221				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
6222				if err != nil {
6223					return err
6224				}
6225				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
6226			}
6227		case "zones":
6228			if v != nil {
6229				var zones []string
6230				err = json.Unmarshal(*v, &zones)
6231				if err != nil {
6232					return err
6233				}
6234				af.Zones = &zones
6235			}
6236		case "etag":
6237			if v != nil {
6238				var etag string
6239				err = json.Unmarshal(*v, &etag)
6240				if err != nil {
6241					return err
6242				}
6243				af.Etag = &etag
6244			}
6245		case "id":
6246			if v != nil {
6247				var ID string
6248				err = json.Unmarshal(*v, &ID)
6249				if err != nil {
6250					return err
6251				}
6252				af.ID = &ID
6253			}
6254		case "name":
6255			if v != nil {
6256				var name string
6257				err = json.Unmarshal(*v, &name)
6258				if err != nil {
6259					return err
6260				}
6261				af.Name = &name
6262			}
6263		case "type":
6264			if v != nil {
6265				var typeVar string
6266				err = json.Unmarshal(*v, &typeVar)
6267				if err != nil {
6268					return err
6269				}
6270				af.Type = &typeVar
6271			}
6272		case "location":
6273			if v != nil {
6274				var location string
6275				err = json.Unmarshal(*v, &location)
6276				if err != nil {
6277					return err
6278				}
6279				af.Location = &location
6280			}
6281		case "tags":
6282			if v != nil {
6283				var tags map[string]*string
6284				err = json.Unmarshal(*v, &tags)
6285				if err != nil {
6286					return err
6287				}
6288				af.Tags = tags
6289			}
6290		}
6291	}
6292
6293	return nil
6294}
6295
6296// AzureFirewallApplicationRule properties of an application rule.
6297type AzureFirewallApplicationRule struct {
6298	// Name - Name of the application rule.
6299	Name *string `json:"name,omitempty"`
6300	// Description - Description of the rule.
6301	Description *string `json:"description,omitempty"`
6302	// SourceAddresses - List of source IP addresses for this rule.
6303	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6304	// Protocols - Array of ApplicationRuleProtocols.
6305	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
6306	// TargetFqdns - List of FQDNs for this rule.
6307	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
6308	// FqdnTags - List of FQDN Tags for this rule.
6309	FqdnTags *[]string `json:"fqdnTags,omitempty"`
6310}
6311
6312// AzureFirewallApplicationRuleCollection application rule collection resource.
6313type AzureFirewallApplicationRuleCollection struct {
6314	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
6315	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
6316	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
6317	Name *string `json:"name,omitempty"`
6318	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6319	Etag *string `json:"etag,omitempty"`
6320	// ID - Resource ID.
6321	ID *string `json:"id,omitempty"`
6322}
6323
6324// MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
6325func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
6326	objectMap := make(map[string]interface{})
6327	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
6328		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
6329	}
6330	if afarc.Name != nil {
6331		objectMap["name"] = afarc.Name
6332	}
6333	if afarc.ID != nil {
6334		objectMap["id"] = afarc.ID
6335	}
6336	return json.Marshal(objectMap)
6337}
6338
6339// UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
6340func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
6341	var m map[string]*json.RawMessage
6342	err := json.Unmarshal(body, &m)
6343	if err != nil {
6344		return err
6345	}
6346	for k, v := range m {
6347		switch k {
6348		case "properties":
6349			if v != nil {
6350				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
6351				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
6352				if err != nil {
6353					return err
6354				}
6355				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
6356			}
6357		case "name":
6358			if v != nil {
6359				var name string
6360				err = json.Unmarshal(*v, &name)
6361				if err != nil {
6362					return err
6363				}
6364				afarc.Name = &name
6365			}
6366		case "etag":
6367			if v != nil {
6368				var etag string
6369				err = json.Unmarshal(*v, &etag)
6370				if err != nil {
6371					return err
6372				}
6373				afarc.Etag = &etag
6374			}
6375		case "id":
6376			if v != nil {
6377				var ID string
6378				err = json.Unmarshal(*v, &ID)
6379				if err != nil {
6380					return err
6381				}
6382				afarc.ID = &ID
6383			}
6384		}
6385	}
6386
6387	return nil
6388}
6389
6390// AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
6391type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
6392	// Priority - Priority of the application rule collection resource.
6393	Priority *int32 `json:"priority,omitempty"`
6394	// Action - The action type of a rule collection.
6395	Action *AzureFirewallRCAction `json:"action,omitempty"`
6396	// Rules - Collection of rules used by a application rule collection.
6397	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
6398	// ProvisioningState - The provisioning state of the application rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6399	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6400}
6401
6402// AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
6403type AzureFirewallApplicationRuleProtocol struct {
6404	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS', 'AzureFirewallApplicationRuleProtocolTypeMssql'
6405	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
6406	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
6407	Port *int32 `json:"port,omitempty"`
6408}
6409
6410// AzureFirewallFqdnTag azure Firewall FQDN Tag Resource.
6411type AzureFirewallFqdnTag struct {
6412	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
6413	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
6414	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6415	Etag *string `json:"etag,omitempty"`
6416	// ID - Resource ID.
6417	ID *string `json:"id,omitempty"`
6418	// Name - READ-ONLY; Resource name.
6419	Name *string `json:"name,omitempty"`
6420	// Type - READ-ONLY; Resource type.
6421	Type *string `json:"type,omitempty"`
6422	// Location - Resource location.
6423	Location *string `json:"location,omitempty"`
6424	// Tags - Resource tags.
6425	Tags map[string]*string `json:"tags"`
6426}
6427
6428// MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
6429func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
6430	objectMap := make(map[string]interface{})
6431	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
6432		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
6433	}
6434	if afft.ID != nil {
6435		objectMap["id"] = afft.ID
6436	}
6437	if afft.Location != nil {
6438		objectMap["location"] = afft.Location
6439	}
6440	if afft.Tags != nil {
6441		objectMap["tags"] = afft.Tags
6442	}
6443	return json.Marshal(objectMap)
6444}
6445
6446// UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
6447func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
6448	var m map[string]*json.RawMessage
6449	err := json.Unmarshal(body, &m)
6450	if err != nil {
6451		return err
6452	}
6453	for k, v := range m {
6454		switch k {
6455		case "properties":
6456			if v != nil {
6457				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
6458				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
6459				if err != nil {
6460					return err
6461				}
6462				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
6463			}
6464		case "etag":
6465			if v != nil {
6466				var etag string
6467				err = json.Unmarshal(*v, &etag)
6468				if err != nil {
6469					return err
6470				}
6471				afft.Etag = &etag
6472			}
6473		case "id":
6474			if v != nil {
6475				var ID string
6476				err = json.Unmarshal(*v, &ID)
6477				if err != nil {
6478					return err
6479				}
6480				afft.ID = &ID
6481			}
6482		case "name":
6483			if v != nil {
6484				var name string
6485				err = json.Unmarshal(*v, &name)
6486				if err != nil {
6487					return err
6488				}
6489				afft.Name = &name
6490			}
6491		case "type":
6492			if v != nil {
6493				var typeVar string
6494				err = json.Unmarshal(*v, &typeVar)
6495				if err != nil {
6496					return err
6497				}
6498				afft.Type = &typeVar
6499			}
6500		case "location":
6501			if v != nil {
6502				var location string
6503				err = json.Unmarshal(*v, &location)
6504				if err != nil {
6505					return err
6506				}
6507				afft.Location = &location
6508			}
6509		case "tags":
6510			if v != nil {
6511				var tags map[string]*string
6512				err = json.Unmarshal(*v, &tags)
6513				if err != nil {
6514					return err
6515				}
6516				afft.Tags = tags
6517			}
6518		}
6519	}
6520
6521	return nil
6522}
6523
6524// AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
6525type AzureFirewallFqdnTagListResult struct {
6526	autorest.Response `json:"-"`
6527	// Value - List of Azure Firewall FQDN Tags in a resource group.
6528	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
6529	// NextLink - URL to get the next set of results.
6530	NextLink *string `json:"nextLink,omitempty"`
6531}
6532
6533// AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
6534// values.
6535type AzureFirewallFqdnTagListResultIterator struct {
6536	i    int
6537	page AzureFirewallFqdnTagListResultPage
6538}
6539
6540// NextWithContext advances to the next value.  If there was an error making
6541// the request the iterator does not advance and the error is returned.
6542func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
6543	if tracing.IsEnabled() {
6544		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
6545		defer func() {
6546			sc := -1
6547			if iter.Response().Response.Response != nil {
6548				sc = iter.Response().Response.Response.StatusCode
6549			}
6550			tracing.EndSpan(ctx, sc, err)
6551		}()
6552	}
6553	iter.i++
6554	if iter.i < len(iter.page.Values()) {
6555		return nil
6556	}
6557	err = iter.page.NextWithContext(ctx)
6558	if err != nil {
6559		iter.i--
6560		return err
6561	}
6562	iter.i = 0
6563	return nil
6564}
6565
6566// Next advances to the next value.  If there was an error making
6567// the request the iterator does not advance and the error is returned.
6568// Deprecated: Use NextWithContext() instead.
6569func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
6570	return iter.NextWithContext(context.Background())
6571}
6572
6573// NotDone returns true if the enumeration should be started or is not yet complete.
6574func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
6575	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6576}
6577
6578// Response returns the raw server response from the last page request.
6579func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
6580	return iter.page.Response()
6581}
6582
6583// Value returns the current value or a zero-initialized value if the
6584// iterator has advanced beyond the end of the collection.
6585func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
6586	if !iter.page.NotDone() {
6587		return AzureFirewallFqdnTag{}
6588	}
6589	return iter.page.Values()[iter.i]
6590}
6591
6592// Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
6593func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
6594	return AzureFirewallFqdnTagListResultIterator{page: page}
6595}
6596
6597// IsEmpty returns true if the ListResult contains no values.
6598func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
6599	return afftlr.Value == nil || len(*afftlr.Value) == 0
6600}
6601
6602// azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
6603// It returns nil if no more results exist.
6604func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
6605	if afftlr.NextLink == nil || len(to.String(afftlr.NextLink)) < 1 {
6606		return nil, nil
6607	}
6608	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6609		autorest.AsJSON(),
6610		autorest.AsGet(),
6611		autorest.WithBaseURL(to.String(afftlr.NextLink)))
6612}
6613
6614// AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
6615type AzureFirewallFqdnTagListResultPage struct {
6616	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
6617	afftlr AzureFirewallFqdnTagListResult
6618}
6619
6620// NextWithContext advances to the next page of values.  If there was an error making
6621// the request the page does not advance and the error is returned.
6622func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
6623	if tracing.IsEnabled() {
6624		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
6625		defer func() {
6626			sc := -1
6627			if page.Response().Response.Response != nil {
6628				sc = page.Response().Response.Response.StatusCode
6629			}
6630			tracing.EndSpan(ctx, sc, err)
6631		}()
6632	}
6633	next, err := page.fn(ctx, page.afftlr)
6634	if err != nil {
6635		return err
6636	}
6637	page.afftlr = next
6638	return nil
6639}
6640
6641// Next advances to the next page of values.  If there was an error making
6642// the request the page does not advance and the error is returned.
6643// Deprecated: Use NextWithContext() instead.
6644func (page *AzureFirewallFqdnTagListResultPage) Next() error {
6645	return page.NextWithContext(context.Background())
6646}
6647
6648// NotDone returns true if the page enumeration should be started or is not yet complete.
6649func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
6650	return !page.afftlr.IsEmpty()
6651}
6652
6653// Response returns the raw server response from the last page request.
6654func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
6655	return page.afftlr
6656}
6657
6658// Values returns the slice of values for the current page or nil if there are no values.
6659func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
6660	if page.afftlr.IsEmpty() {
6661		return nil
6662	}
6663	return *page.afftlr.Value
6664}
6665
6666// Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
6667func NewAzureFirewallFqdnTagListResultPage(getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
6668	return AzureFirewallFqdnTagListResultPage{fn: getNextPage}
6669}
6670
6671// AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties.
6672type AzureFirewallFqdnTagPropertiesFormat struct {
6673	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall FQDN tag resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6674	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6675	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
6676	FqdnTagName *string `json:"fqdnTagName,omitempty"`
6677}
6678
6679// AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
6680type AzureFirewallIPConfiguration struct {
6681	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
6682	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
6683	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
6684	Name *string `json:"name,omitempty"`
6685	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6686	Etag *string `json:"etag,omitempty"`
6687	// ID - Resource ID.
6688	ID *string `json:"id,omitempty"`
6689}
6690
6691// MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
6692func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
6693	objectMap := make(map[string]interface{})
6694	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
6695		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
6696	}
6697	if afic.Name != nil {
6698		objectMap["name"] = afic.Name
6699	}
6700	if afic.ID != nil {
6701		objectMap["id"] = afic.ID
6702	}
6703	return json.Marshal(objectMap)
6704}
6705
6706// UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
6707func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
6708	var m map[string]*json.RawMessage
6709	err := json.Unmarshal(body, &m)
6710	if err != nil {
6711		return err
6712	}
6713	for k, v := range m {
6714		switch k {
6715		case "properties":
6716			if v != nil {
6717				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
6718				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
6719				if err != nil {
6720					return err
6721				}
6722				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
6723			}
6724		case "name":
6725			if v != nil {
6726				var name string
6727				err = json.Unmarshal(*v, &name)
6728				if err != nil {
6729					return err
6730				}
6731				afic.Name = &name
6732			}
6733		case "etag":
6734			if v != nil {
6735				var etag string
6736				err = json.Unmarshal(*v, &etag)
6737				if err != nil {
6738					return err
6739				}
6740				afic.Etag = &etag
6741			}
6742		case "id":
6743			if v != nil {
6744				var ID string
6745				err = json.Unmarshal(*v, &ID)
6746				if err != nil {
6747					return err
6748				}
6749				afic.ID = &ID
6750			}
6751		}
6752	}
6753
6754	return nil
6755}
6756
6757// AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
6758type AzureFirewallIPConfigurationPropertiesFormat struct {
6759	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
6760	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
6761	// Subnet - Reference of the subnet resource. This resource must be named 'AzureFirewallSubnet'.
6762	Subnet *SubResource `json:"subnet,omitempty"`
6763	// PublicIPAddress - Reference of the PublicIP resource. This field is a mandatory input if subnet is not null.
6764	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
6765	// ProvisioningState - The provisioning state of the Azure firewall IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
6766	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
6767}
6768
6769// AzureFirewallListResult response for ListAzureFirewalls API service call.
6770type AzureFirewallListResult struct {
6771	autorest.Response `json:"-"`
6772	// Value - List of Azure Firewalls in a resource group.
6773	Value *[]AzureFirewall `json:"value,omitempty"`
6774	// NextLink - URL to get the next set of results.
6775	NextLink *string `json:"nextLink,omitempty"`
6776}
6777
6778// AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
6779type AzureFirewallListResultIterator struct {
6780	i    int
6781	page AzureFirewallListResultPage
6782}
6783
6784// NextWithContext advances to the next value.  If there was an error making
6785// the request the iterator does not advance and the error is returned.
6786func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
6787	if tracing.IsEnabled() {
6788		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
6789		defer func() {
6790			sc := -1
6791			if iter.Response().Response.Response != nil {
6792				sc = iter.Response().Response.Response.StatusCode
6793			}
6794			tracing.EndSpan(ctx, sc, err)
6795		}()
6796	}
6797	iter.i++
6798	if iter.i < len(iter.page.Values()) {
6799		return nil
6800	}
6801	err = iter.page.NextWithContext(ctx)
6802	if err != nil {
6803		iter.i--
6804		return err
6805	}
6806	iter.i = 0
6807	return nil
6808}
6809
6810// Next advances to the next value.  If there was an error making
6811// the request the iterator does not advance and the error is returned.
6812// Deprecated: Use NextWithContext() instead.
6813func (iter *AzureFirewallListResultIterator) Next() error {
6814	return iter.NextWithContext(context.Background())
6815}
6816
6817// NotDone returns true if the enumeration should be started or is not yet complete.
6818func (iter AzureFirewallListResultIterator) NotDone() bool {
6819	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6820}
6821
6822// Response returns the raw server response from the last page request.
6823func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
6824	return iter.page.Response()
6825}
6826
6827// Value returns the current value or a zero-initialized value if the
6828// iterator has advanced beyond the end of the collection.
6829func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
6830	if !iter.page.NotDone() {
6831		return AzureFirewall{}
6832	}
6833	return iter.page.Values()[iter.i]
6834}
6835
6836// Creates a new instance of the AzureFirewallListResultIterator type.
6837func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
6838	return AzureFirewallListResultIterator{page: page}
6839}
6840
6841// IsEmpty returns true if the ListResult contains no values.
6842func (aflr AzureFirewallListResult) IsEmpty() bool {
6843	return aflr.Value == nil || len(*aflr.Value) == 0
6844}
6845
6846// azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
6847// It returns nil if no more results exist.
6848func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
6849	if aflr.NextLink == nil || len(to.String(aflr.NextLink)) < 1 {
6850		return nil, nil
6851	}
6852	return autorest.Prepare((&http.Request{}).WithContext(ctx),
6853		autorest.AsJSON(),
6854		autorest.AsGet(),
6855		autorest.WithBaseURL(to.String(aflr.NextLink)))
6856}
6857
6858// AzureFirewallListResultPage contains a page of AzureFirewall values.
6859type AzureFirewallListResultPage struct {
6860	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
6861	aflr AzureFirewallListResult
6862}
6863
6864// NextWithContext advances to the next page of values.  If there was an error making
6865// the request the page does not advance and the error is returned.
6866func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
6867	if tracing.IsEnabled() {
6868		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
6869		defer func() {
6870			sc := -1
6871			if page.Response().Response.Response != nil {
6872				sc = page.Response().Response.Response.StatusCode
6873			}
6874			tracing.EndSpan(ctx, sc, err)
6875		}()
6876	}
6877	next, err := page.fn(ctx, page.aflr)
6878	if err != nil {
6879		return err
6880	}
6881	page.aflr = next
6882	return nil
6883}
6884
6885// Next advances to the next page of values.  If there was an error making
6886// the request the page does not advance and the error is returned.
6887// Deprecated: Use NextWithContext() instead.
6888func (page *AzureFirewallListResultPage) Next() error {
6889	return page.NextWithContext(context.Background())
6890}
6891
6892// NotDone returns true if the page enumeration should be started or is not yet complete.
6893func (page AzureFirewallListResultPage) NotDone() bool {
6894	return !page.aflr.IsEmpty()
6895}
6896
6897// Response returns the raw server response from the last page request.
6898func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
6899	return page.aflr
6900}
6901
6902// Values returns the slice of values for the current page or nil if there are no values.
6903func (page AzureFirewallListResultPage) Values() []AzureFirewall {
6904	if page.aflr.IsEmpty() {
6905		return nil
6906	}
6907	return *page.aflr.Value
6908}
6909
6910// Creates a new instance of the AzureFirewallListResultPage type.
6911func NewAzureFirewallListResultPage(getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
6912	return AzureFirewallListResultPage{fn: getNextPage}
6913}
6914
6915// AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
6916type AzureFirewallNatRCAction struct {
6917	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
6918	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
6919}
6920
6921// AzureFirewallNatRule properties of a NAT rule.
6922type AzureFirewallNatRule struct {
6923	// Name - Name of the NAT rule.
6924	Name *string `json:"name,omitempty"`
6925	// Description - Description of the rule.
6926	Description *string `json:"description,omitempty"`
6927	// SourceAddresses - List of source IP addresses for this rule.
6928	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
6929	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
6930	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
6931	// DestinationPorts - List of destination ports.
6932	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
6933	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
6934	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
6935	// TranslatedAddress - The translated address for this NAT rule.
6936	TranslatedAddress *string `json:"translatedAddress,omitempty"`
6937	// TranslatedPort - The translated port for this NAT rule.
6938	TranslatedPort *string `json:"translatedPort,omitempty"`
6939}
6940
6941// AzureFirewallNatRuleCollection NAT rule collection resource.
6942type AzureFirewallNatRuleCollection struct {
6943	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
6944	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
6945	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
6946	Name *string `json:"name,omitempty"`
6947	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
6948	Etag *string `json:"etag,omitempty"`
6949	// ID - Resource ID.
6950	ID *string `json:"id,omitempty"`
6951}
6952
6953// MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
6954func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
6955	objectMap := make(map[string]interface{})
6956	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
6957		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
6958	}
6959	if afnrc.Name != nil {
6960		objectMap["name"] = afnrc.Name
6961	}
6962	if afnrc.ID != nil {
6963		objectMap["id"] = afnrc.ID
6964	}
6965	return json.Marshal(objectMap)
6966}
6967
6968// UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
6969func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
6970	var m map[string]*json.RawMessage
6971	err := json.Unmarshal(body, &m)
6972	if err != nil {
6973		return err
6974	}
6975	for k, v := range m {
6976		switch k {
6977		case "properties":
6978			if v != nil {
6979				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
6980				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
6981				if err != nil {
6982					return err
6983				}
6984				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
6985			}
6986		case "name":
6987			if v != nil {
6988				var name string
6989				err = json.Unmarshal(*v, &name)
6990				if err != nil {
6991					return err
6992				}
6993				afnrc.Name = &name
6994			}
6995		case "etag":
6996			if v != nil {
6997				var etag string
6998				err = json.Unmarshal(*v, &etag)
6999				if err != nil {
7000					return err
7001				}
7002				afnrc.Etag = &etag
7003			}
7004		case "id":
7005			if v != nil {
7006				var ID string
7007				err = json.Unmarshal(*v, &ID)
7008				if err != nil {
7009					return err
7010				}
7011				afnrc.ID = &ID
7012			}
7013		}
7014	}
7015
7016	return nil
7017}
7018
7019// AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
7020type AzureFirewallNatRuleCollectionProperties struct {
7021	// Priority - Priority of the NAT rule collection resource.
7022	Priority *int32 `json:"priority,omitempty"`
7023	// Action - The action type of a NAT rule collection.
7024	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
7025	// Rules - Collection of rules used by a NAT rule collection.
7026	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
7027	// ProvisioningState - The provisioning state of the NAT rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7028	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7029}
7030
7031// AzureFirewallNetworkRule properties of the network rule.
7032type AzureFirewallNetworkRule struct {
7033	// Name - Name of the network rule.
7034	Name *string `json:"name,omitempty"`
7035	// Description - Description of the rule.
7036	Description *string `json:"description,omitempty"`
7037	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
7038	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
7039	// SourceAddresses - List of source IP addresses for this rule.
7040	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
7041	// DestinationAddresses - List of destination IP addresses.
7042	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
7043	// DestinationPorts - List of destination ports.
7044	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
7045}
7046
7047// AzureFirewallNetworkRuleCollection network rule collection resource.
7048type AzureFirewallNetworkRuleCollection struct {
7049	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
7050	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
7051	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
7052	Name *string `json:"name,omitempty"`
7053	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7054	Etag *string `json:"etag,omitempty"`
7055	// ID - Resource ID.
7056	ID *string `json:"id,omitempty"`
7057}
7058
7059// MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
7060func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
7061	objectMap := make(map[string]interface{})
7062	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
7063		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
7064	}
7065	if afnrc.Name != nil {
7066		objectMap["name"] = afnrc.Name
7067	}
7068	if afnrc.ID != nil {
7069		objectMap["id"] = afnrc.ID
7070	}
7071	return json.Marshal(objectMap)
7072}
7073
7074// UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
7075func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
7076	var m map[string]*json.RawMessage
7077	err := json.Unmarshal(body, &m)
7078	if err != nil {
7079		return err
7080	}
7081	for k, v := range m {
7082		switch k {
7083		case "properties":
7084			if v != nil {
7085				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
7086				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
7087				if err != nil {
7088					return err
7089				}
7090				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
7091			}
7092		case "name":
7093			if v != nil {
7094				var name string
7095				err = json.Unmarshal(*v, &name)
7096				if err != nil {
7097					return err
7098				}
7099				afnrc.Name = &name
7100			}
7101		case "etag":
7102			if v != nil {
7103				var etag string
7104				err = json.Unmarshal(*v, &etag)
7105				if err != nil {
7106					return err
7107				}
7108				afnrc.Etag = &etag
7109			}
7110		case "id":
7111			if v != nil {
7112				var ID string
7113				err = json.Unmarshal(*v, &ID)
7114				if err != nil {
7115					return err
7116				}
7117				afnrc.ID = &ID
7118			}
7119		}
7120	}
7121
7122	return nil
7123}
7124
7125// AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
7126type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
7127	// Priority - Priority of the network rule collection resource.
7128	Priority *int32 `json:"priority,omitempty"`
7129	// Action - The action type of a rule collection.
7130	Action *AzureFirewallRCAction `json:"action,omitempty"`
7131	// Rules - Collection of rules used by a network rule collection.
7132	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
7133	// ProvisioningState - The provisioning state of the network rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7134	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7135}
7136
7137// AzureFirewallPropertiesFormat properties of the Azure Firewall.
7138type AzureFirewallPropertiesFormat struct {
7139	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
7140	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
7141	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
7142	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
7143	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
7144	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
7145	// IPConfigurations - IP configuration of the Azure Firewall resource.
7146	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
7147	// ProvisioningState - The provisioning state of the Azure firewall resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7148	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7149	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
7150	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
7151	// VirtualHub - The virtualHub to which the firewall belongs.
7152	VirtualHub *SubResource `json:"virtualHub,omitempty"`
7153	// FirewallPolicy - The firewallPolicy associated with this azure firewall.
7154	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
7155	// HubIPAddresses - READ-ONLY; IP addresses associated with AzureFirewall.
7156	HubIPAddresses *HubIPAddresses `json:"hubIpAddresses,omitempty"`
7157}
7158
7159// AzureFirewallPublicIPAddress public IP Address associated with azure firewall.
7160type AzureFirewallPublicIPAddress struct {
7161	// Address - Public IP Address value.
7162	Address *string `json:"address,omitempty"`
7163}
7164
7165// AzureFirewallRCAction properties of the AzureFirewallRCAction.
7166type AzureFirewallRCAction struct {
7167	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
7168	Type AzureFirewallRCActionType `json:"type,omitempty"`
7169}
7170
7171// AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7172// long-running operation.
7173type AzureFirewallsCreateOrUpdateFuture struct {
7174	azure.Future
7175}
7176
7177// Result returns the result of the asynchronous operation.
7178// If the operation has not completed it will return an error.
7179func (future *AzureFirewallsCreateOrUpdateFuture) Result(client AzureFirewallsClient) (af AzureFirewall, err error) {
7180	var done bool
7181	done, err = future.DoneWithContext(context.Background(), client)
7182	if err != nil {
7183		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7184		return
7185	}
7186	if !done {
7187		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
7188		return
7189	}
7190	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7191	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
7192		af, err = client.CreateOrUpdateResponder(af.Response.Response)
7193		if err != nil {
7194			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
7195		}
7196	}
7197	return
7198}
7199
7200// AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
7201// operation.
7202type AzureFirewallsDeleteFuture struct {
7203	azure.Future
7204}
7205
7206// Result returns the result of the asynchronous operation.
7207// If the operation has not completed it will return an error.
7208func (future *AzureFirewallsDeleteFuture) Result(client AzureFirewallsClient) (ar autorest.Response, err error) {
7209	var done bool
7210	done, err = future.DoneWithContext(context.Background(), client)
7211	if err != nil {
7212		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
7213		return
7214	}
7215	if !done {
7216		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
7217		return
7218	}
7219	ar.Response = future.Response()
7220	return
7221}
7222
7223// AzureReachabilityReport azure reachability report details.
7224type AzureReachabilityReport struct {
7225	autorest.Response `json:"-"`
7226	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
7227	AggregationLevel *string `json:"aggregationLevel,omitempty"`
7228	// ProviderLocation - Parameters that define a geographic location.
7229	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7230	// ReachabilityReport - List of Azure reachability report items.
7231	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
7232}
7233
7234// AzureReachabilityReportItem azure reachability report details for a given provider location.
7235type AzureReachabilityReportItem struct {
7236	// Provider - The Internet service provider.
7237	Provider *string `json:"provider,omitempty"`
7238	// AzureLocation - The Azure region.
7239	AzureLocation *string `json:"azureLocation,omitempty"`
7240	// Latencies - List of latency details for each of the time series.
7241	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
7242}
7243
7244// AzureReachabilityReportLatencyInfo details on latency for a time series.
7245type AzureReachabilityReportLatencyInfo struct {
7246	// TimeStamp - The time stamp.
7247	TimeStamp *date.Time `json:"timeStamp,omitempty"`
7248	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
7249	Score *int32 `json:"score,omitempty"`
7250}
7251
7252// AzureReachabilityReportLocation parameters that define a geographic location.
7253type AzureReachabilityReportLocation struct {
7254	// Country - The name of the country.
7255	Country *string `json:"country,omitempty"`
7256	// State - The name of the state.
7257	State *string `json:"state,omitempty"`
7258	// City - The name of the city or town.
7259	City *string `json:"city,omitempty"`
7260}
7261
7262// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
7263type AzureReachabilityReportParameters struct {
7264	// ProviderLocation - Parameters that define a geographic location.
7265	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
7266	// Providers - List of Internet service providers.
7267	Providers *[]string `json:"providers,omitempty"`
7268	// AzureLocations - Optional Azure regions to scope the query to.
7269	AzureLocations *[]string `json:"azureLocations,omitempty"`
7270	// StartTime - The start time for the Azure reachability report.
7271	StartTime *date.Time `json:"startTime,omitempty"`
7272	// EndTime - The end time for the Azure reachability report.
7273	EndTime *date.Time `json:"endTime,omitempty"`
7274}
7275
7276// BackendAddressPool pool of backend IP addresses.
7277type BackendAddressPool struct {
7278	autorest.Response `json:"-"`
7279	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
7280	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
7281	// 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.
7282	Name *string `json:"name,omitempty"`
7283	// Etag - A unique read-only string that changes whenever the resource is updated.
7284	Etag *string `json:"etag,omitempty"`
7285	// Type - READ-ONLY; Type of the resource.
7286	Type *string `json:"type,omitempty"`
7287	// ID - Resource ID.
7288	ID *string `json:"id,omitempty"`
7289}
7290
7291// MarshalJSON is the custom marshaler for BackendAddressPool.
7292func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
7293	objectMap := make(map[string]interface{})
7294	if bap.BackendAddressPoolPropertiesFormat != nil {
7295		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
7296	}
7297	if bap.Name != nil {
7298		objectMap["name"] = bap.Name
7299	}
7300	if bap.Etag != nil {
7301		objectMap["etag"] = bap.Etag
7302	}
7303	if bap.ID != nil {
7304		objectMap["id"] = bap.ID
7305	}
7306	return json.Marshal(objectMap)
7307}
7308
7309// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
7310func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
7311	var m map[string]*json.RawMessage
7312	err := json.Unmarshal(body, &m)
7313	if err != nil {
7314		return err
7315	}
7316	for k, v := range m {
7317		switch k {
7318		case "properties":
7319			if v != nil {
7320				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
7321				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
7322				if err != nil {
7323					return err
7324				}
7325				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
7326			}
7327		case "name":
7328			if v != nil {
7329				var name string
7330				err = json.Unmarshal(*v, &name)
7331				if err != nil {
7332					return err
7333				}
7334				bap.Name = &name
7335			}
7336		case "etag":
7337			if v != nil {
7338				var etag string
7339				err = json.Unmarshal(*v, &etag)
7340				if err != nil {
7341					return err
7342				}
7343				bap.Etag = &etag
7344			}
7345		case "type":
7346			if v != nil {
7347				var typeVar string
7348				err = json.Unmarshal(*v, &typeVar)
7349				if err != nil {
7350					return err
7351				}
7352				bap.Type = &typeVar
7353			}
7354		case "id":
7355			if v != nil {
7356				var ID string
7357				err = json.Unmarshal(*v, &ID)
7358				if err != nil {
7359					return err
7360				}
7361				bap.ID = &ID
7362			}
7363		}
7364	}
7365
7366	return nil
7367}
7368
7369// BackendAddressPoolPropertiesFormat properties of the backend address pool.
7370type BackendAddressPoolPropertiesFormat struct {
7371	// BackendIPConfigurations - READ-ONLY; An array of references to IP addresses defined in network interfaces.
7372	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
7373	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this backend address pool.
7374	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
7375	// OutboundRule - READ-ONLY; A reference to an outbound rule that uses this backend address pool.
7376	OutboundRule *SubResource `json:"outboundRule,omitempty"`
7377	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this backend address pool.
7378	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
7379	// ProvisioningState - The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7380	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7381}
7382
7383// BastionHost bastion Host resource.
7384type BastionHost struct {
7385	autorest.Response `json:"-"`
7386	// BastionHostPropertiesFormat - Represents the bastion host resource.
7387	*BastionHostPropertiesFormat `json:"properties,omitempty"`
7388	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7389	Etag *string `json:"etag,omitempty"`
7390	// ID - Resource ID.
7391	ID *string `json:"id,omitempty"`
7392	// Name - READ-ONLY; Resource name.
7393	Name *string `json:"name,omitempty"`
7394	// Type - READ-ONLY; Resource type.
7395	Type *string `json:"type,omitempty"`
7396	// Location - Resource location.
7397	Location *string `json:"location,omitempty"`
7398	// Tags - Resource tags.
7399	Tags map[string]*string `json:"tags"`
7400}
7401
7402// MarshalJSON is the custom marshaler for BastionHost.
7403func (bh BastionHost) MarshalJSON() ([]byte, error) {
7404	objectMap := make(map[string]interface{})
7405	if bh.BastionHostPropertiesFormat != nil {
7406		objectMap["properties"] = bh.BastionHostPropertiesFormat
7407	}
7408	if bh.ID != nil {
7409		objectMap["id"] = bh.ID
7410	}
7411	if bh.Location != nil {
7412		objectMap["location"] = bh.Location
7413	}
7414	if bh.Tags != nil {
7415		objectMap["tags"] = bh.Tags
7416	}
7417	return json.Marshal(objectMap)
7418}
7419
7420// UnmarshalJSON is the custom unmarshaler for BastionHost struct.
7421func (bh *BastionHost) UnmarshalJSON(body []byte) error {
7422	var m map[string]*json.RawMessage
7423	err := json.Unmarshal(body, &m)
7424	if err != nil {
7425		return err
7426	}
7427	for k, v := range m {
7428		switch k {
7429		case "properties":
7430			if v != nil {
7431				var bastionHostPropertiesFormat BastionHostPropertiesFormat
7432				err = json.Unmarshal(*v, &bastionHostPropertiesFormat)
7433				if err != nil {
7434					return err
7435				}
7436				bh.BastionHostPropertiesFormat = &bastionHostPropertiesFormat
7437			}
7438		case "etag":
7439			if v != nil {
7440				var etag string
7441				err = json.Unmarshal(*v, &etag)
7442				if err != nil {
7443					return err
7444				}
7445				bh.Etag = &etag
7446			}
7447		case "id":
7448			if v != nil {
7449				var ID string
7450				err = json.Unmarshal(*v, &ID)
7451				if err != nil {
7452					return err
7453				}
7454				bh.ID = &ID
7455			}
7456		case "name":
7457			if v != nil {
7458				var name string
7459				err = json.Unmarshal(*v, &name)
7460				if err != nil {
7461					return err
7462				}
7463				bh.Name = &name
7464			}
7465		case "type":
7466			if v != nil {
7467				var typeVar string
7468				err = json.Unmarshal(*v, &typeVar)
7469				if err != nil {
7470					return err
7471				}
7472				bh.Type = &typeVar
7473			}
7474		case "location":
7475			if v != nil {
7476				var location string
7477				err = json.Unmarshal(*v, &location)
7478				if err != nil {
7479					return err
7480				}
7481				bh.Location = &location
7482			}
7483		case "tags":
7484			if v != nil {
7485				var tags map[string]*string
7486				err = json.Unmarshal(*v, &tags)
7487				if err != nil {
7488					return err
7489				}
7490				bh.Tags = tags
7491			}
7492		}
7493	}
7494
7495	return nil
7496}
7497
7498// BastionHostIPConfiguration IP configuration of an Bastion Host.
7499type BastionHostIPConfiguration struct {
7500	// BastionHostIPConfigurationPropertiesFormat - Represents the ip configuration associated with the resource.
7501	*BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7502	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
7503	Name *string `json:"name,omitempty"`
7504	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
7505	Etag *string `json:"etag,omitempty"`
7506	// Type - READ-ONLY; Ip configuration type.
7507	Type *string `json:"type,omitempty"`
7508	// ID - Resource ID.
7509	ID *string `json:"id,omitempty"`
7510}
7511
7512// MarshalJSON is the custom marshaler for BastionHostIPConfiguration.
7513func (bhic BastionHostIPConfiguration) MarshalJSON() ([]byte, error) {
7514	objectMap := make(map[string]interface{})
7515	if bhic.BastionHostIPConfigurationPropertiesFormat != nil {
7516		objectMap["properties"] = bhic.BastionHostIPConfigurationPropertiesFormat
7517	}
7518	if bhic.Name != nil {
7519		objectMap["name"] = bhic.Name
7520	}
7521	if bhic.ID != nil {
7522		objectMap["id"] = bhic.ID
7523	}
7524	return json.Marshal(objectMap)
7525}
7526
7527// UnmarshalJSON is the custom unmarshaler for BastionHostIPConfiguration struct.
7528func (bhic *BastionHostIPConfiguration) UnmarshalJSON(body []byte) error {
7529	var m map[string]*json.RawMessage
7530	err := json.Unmarshal(body, &m)
7531	if err != nil {
7532		return err
7533	}
7534	for k, v := range m {
7535		switch k {
7536		case "properties":
7537			if v != nil {
7538				var bastionHostIPConfigurationPropertiesFormat BastionHostIPConfigurationPropertiesFormat
7539				err = json.Unmarshal(*v, &bastionHostIPConfigurationPropertiesFormat)
7540				if err != nil {
7541					return err
7542				}
7543				bhic.BastionHostIPConfigurationPropertiesFormat = &bastionHostIPConfigurationPropertiesFormat
7544			}
7545		case "name":
7546			if v != nil {
7547				var name string
7548				err = json.Unmarshal(*v, &name)
7549				if err != nil {
7550					return err
7551				}
7552				bhic.Name = &name
7553			}
7554		case "etag":
7555			if v != nil {
7556				var etag string
7557				err = json.Unmarshal(*v, &etag)
7558				if err != nil {
7559					return err
7560				}
7561				bhic.Etag = &etag
7562			}
7563		case "type":
7564			if v != nil {
7565				var typeVar string
7566				err = json.Unmarshal(*v, &typeVar)
7567				if err != nil {
7568					return err
7569				}
7570				bhic.Type = &typeVar
7571			}
7572		case "id":
7573			if v != nil {
7574				var ID string
7575				err = json.Unmarshal(*v, &ID)
7576				if err != nil {
7577					return err
7578				}
7579				bhic.ID = &ID
7580			}
7581		}
7582	}
7583
7584	return nil
7585}
7586
7587// BastionHostIPConfigurationPropertiesFormat properties of IP configuration of an Bastion Host.
7588type BastionHostIPConfigurationPropertiesFormat struct {
7589	// Subnet - Reference of the subnet resource.
7590	Subnet *SubResource `json:"subnet,omitempty"`
7591	// PublicIPAddress - Reference of the PublicIP resource.
7592	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
7593	// ProvisioningState - The provisioning state of the bastion host IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7594	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7595	// PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic'
7596	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
7597}
7598
7599// BastionHostListResult response for ListBastionHosts API service call.
7600type BastionHostListResult struct {
7601	autorest.Response `json:"-"`
7602	// Value - List of Bastion Hosts in a resource group.
7603	Value *[]BastionHost `json:"value,omitempty"`
7604	// NextLink - URL to get the next set of results.
7605	NextLink *string `json:"nextLink,omitempty"`
7606}
7607
7608// BastionHostListResultIterator provides access to a complete listing of BastionHost values.
7609type BastionHostListResultIterator struct {
7610	i    int
7611	page BastionHostListResultPage
7612}
7613
7614// NextWithContext advances to the next value.  If there was an error making
7615// the request the iterator does not advance and the error is returned.
7616func (iter *BastionHostListResultIterator) NextWithContext(ctx context.Context) (err error) {
7617	if tracing.IsEnabled() {
7618		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultIterator.NextWithContext")
7619		defer func() {
7620			sc := -1
7621			if iter.Response().Response.Response != nil {
7622				sc = iter.Response().Response.Response.StatusCode
7623			}
7624			tracing.EndSpan(ctx, sc, err)
7625		}()
7626	}
7627	iter.i++
7628	if iter.i < len(iter.page.Values()) {
7629		return nil
7630	}
7631	err = iter.page.NextWithContext(ctx)
7632	if err != nil {
7633		iter.i--
7634		return err
7635	}
7636	iter.i = 0
7637	return nil
7638}
7639
7640// Next advances to the next value.  If there was an error making
7641// the request the iterator does not advance and the error is returned.
7642// Deprecated: Use NextWithContext() instead.
7643func (iter *BastionHostListResultIterator) Next() error {
7644	return iter.NextWithContext(context.Background())
7645}
7646
7647// NotDone returns true if the enumeration should be started or is not yet complete.
7648func (iter BastionHostListResultIterator) NotDone() bool {
7649	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7650}
7651
7652// Response returns the raw server response from the last page request.
7653func (iter BastionHostListResultIterator) Response() BastionHostListResult {
7654	return iter.page.Response()
7655}
7656
7657// Value returns the current value or a zero-initialized value if the
7658// iterator has advanced beyond the end of the collection.
7659func (iter BastionHostListResultIterator) Value() BastionHost {
7660	if !iter.page.NotDone() {
7661		return BastionHost{}
7662	}
7663	return iter.page.Values()[iter.i]
7664}
7665
7666// Creates a new instance of the BastionHostListResultIterator type.
7667func NewBastionHostListResultIterator(page BastionHostListResultPage) BastionHostListResultIterator {
7668	return BastionHostListResultIterator{page: page}
7669}
7670
7671// IsEmpty returns true if the ListResult contains no values.
7672func (bhlr BastionHostListResult) IsEmpty() bool {
7673	return bhlr.Value == nil || len(*bhlr.Value) == 0
7674}
7675
7676// bastionHostListResultPreparer prepares a request to retrieve the next set of results.
7677// It returns nil if no more results exist.
7678func (bhlr BastionHostListResult) bastionHostListResultPreparer(ctx context.Context) (*http.Request, error) {
7679	if bhlr.NextLink == nil || len(to.String(bhlr.NextLink)) < 1 {
7680		return nil, nil
7681	}
7682	return autorest.Prepare((&http.Request{}).WithContext(ctx),
7683		autorest.AsJSON(),
7684		autorest.AsGet(),
7685		autorest.WithBaseURL(to.String(bhlr.NextLink)))
7686}
7687
7688// BastionHostListResultPage contains a page of BastionHost values.
7689type BastionHostListResultPage struct {
7690	fn   func(context.Context, BastionHostListResult) (BastionHostListResult, error)
7691	bhlr BastionHostListResult
7692}
7693
7694// NextWithContext advances to the next page of values.  If there was an error making
7695// the request the page does not advance and the error is returned.
7696func (page *BastionHostListResultPage) NextWithContext(ctx context.Context) (err error) {
7697	if tracing.IsEnabled() {
7698		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultPage.NextWithContext")
7699		defer func() {
7700			sc := -1
7701			if page.Response().Response.Response != nil {
7702				sc = page.Response().Response.Response.StatusCode
7703			}
7704			tracing.EndSpan(ctx, sc, err)
7705		}()
7706	}
7707	next, err := page.fn(ctx, page.bhlr)
7708	if err != nil {
7709		return err
7710	}
7711	page.bhlr = next
7712	return nil
7713}
7714
7715// Next advances to the next page of values.  If there was an error making
7716// the request the page does not advance and the error is returned.
7717// Deprecated: Use NextWithContext() instead.
7718func (page *BastionHostListResultPage) Next() error {
7719	return page.NextWithContext(context.Background())
7720}
7721
7722// NotDone returns true if the page enumeration should be started or is not yet complete.
7723func (page BastionHostListResultPage) NotDone() bool {
7724	return !page.bhlr.IsEmpty()
7725}
7726
7727// Response returns the raw server response from the last page request.
7728func (page BastionHostListResultPage) Response() BastionHostListResult {
7729	return page.bhlr
7730}
7731
7732// Values returns the slice of values for the current page or nil if there are no values.
7733func (page BastionHostListResultPage) Values() []BastionHost {
7734	if page.bhlr.IsEmpty() {
7735		return nil
7736	}
7737	return *page.bhlr.Value
7738}
7739
7740// Creates a new instance of the BastionHostListResultPage type.
7741func NewBastionHostListResultPage(getNextPage func(context.Context, BastionHostListResult) (BastionHostListResult, error)) BastionHostListResultPage {
7742	return BastionHostListResultPage{fn: getNextPage}
7743}
7744
7745// BastionHostPropertiesFormat properties of the Bastion Host.
7746type BastionHostPropertiesFormat struct {
7747	// IPConfigurations - IP configuration of the Bastion Host resource.
7748	IPConfigurations *[]BastionHostIPConfiguration `json:"ipConfigurations,omitempty"`
7749	// DNSName - FQDN for the endpoint on which bastion host is accessible.
7750	DNSName *string `json:"dnsName,omitempty"`
7751	// ProvisioningState - The provisioning state of the bastion host resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
7752	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
7753}
7754
7755// BastionHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
7756// long-running operation.
7757type BastionHostsCreateOrUpdateFuture struct {
7758	azure.Future
7759}
7760
7761// Result returns the result of the asynchronous operation.
7762// If the operation has not completed it will return an error.
7763func (future *BastionHostsCreateOrUpdateFuture) Result(client BastionHostsClient) (bh BastionHost, err error) {
7764	var done bool
7765	done, err = future.DoneWithContext(context.Background(), client)
7766	if err != nil {
7767		err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7768		return
7769	}
7770	if !done {
7771		err = azure.NewAsyncOpIncompleteError("network.BastionHostsCreateOrUpdateFuture")
7772		return
7773	}
7774	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7775	if bh.Response.Response, err = future.GetResult(sender); err == nil && bh.Response.Response.StatusCode != http.StatusNoContent {
7776		bh, err = client.CreateOrUpdateResponder(bh.Response.Response)
7777		if err != nil {
7778			err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", bh.Response.Response, "Failure responding to request")
7779		}
7780	}
7781	return
7782}
7783
7784// BastionHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
7785// operation.
7786type BastionHostsDeleteFuture struct {
7787	azure.Future
7788}
7789
7790// Result returns the result of the asynchronous operation.
7791// If the operation has not completed it will return an error.
7792func (future *BastionHostsDeleteFuture) Result(client BastionHostsClient) (ar autorest.Response, err error) {
7793	var done bool
7794	done, err = future.DoneWithContext(context.Background(), client)
7795	if err != nil {
7796		err = autorest.NewErrorWithError(err, "network.BastionHostsDeleteFuture", "Result", future.Response(), "Polling failure")
7797		return
7798	}
7799	if !done {
7800		err = azure.NewAsyncOpIncompleteError("network.BastionHostsDeleteFuture")
7801		return
7802	}
7803	ar.Response = future.Response()
7804	return
7805}
7806
7807// BGPCommunity contains bgp community information offered in Service Community resources.
7808type BGPCommunity struct {
7809	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
7810	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
7811	// CommunityName - The name of the bgp community. e.g. Skype.
7812	CommunityName *string `json:"communityName,omitempty"`
7813	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
7814	CommunityValue *string `json:"communityValue,omitempty"`
7815	// CommunityPrefixes - The prefixes that the bgp community contains.
7816	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
7817	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
7818	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
7819	// ServiceGroup - The service group of the bgp community contains.
7820	ServiceGroup *string `json:"serviceGroup,omitempty"`
7821}
7822
7823// BgpPeerStatus BGP peer status details.
7824type BgpPeerStatus struct {
7825	// LocalAddress - READ-ONLY; The virtual network gateway's local address.
7826	LocalAddress *string `json:"localAddress,omitempty"`
7827	// Neighbor - READ-ONLY; The remote BGP peer.
7828	Neighbor *string `json:"neighbor,omitempty"`
7829	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer.
7830	Asn *int32 `json:"asn,omitempty"`
7831	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
7832	State BgpPeerState `json:"state,omitempty"`
7833	// ConnectedDuration - READ-ONLY; For how long the peering has been up.
7834	ConnectedDuration *string `json:"connectedDuration,omitempty"`
7835	// RoutesReceived - READ-ONLY; The number of routes learned from this peer.
7836	RoutesReceived *int64 `json:"routesReceived,omitempty"`
7837	// MessagesSent - READ-ONLY; The number of BGP messages sent.
7838	MessagesSent *int64 `json:"messagesSent,omitempty"`
7839	// MessagesReceived - READ-ONLY; The number of BGP messages received.
7840	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
7841}
7842
7843// BgpPeerStatusListResult response for list BGP peer status API service call.
7844type BgpPeerStatusListResult struct {
7845	autorest.Response `json:"-"`
7846	// Value - List of BGP peers.
7847	Value *[]BgpPeerStatus `json:"value,omitempty"`
7848}
7849
7850// BgpServiceCommunity service Community Properties.
7851type BgpServiceCommunity struct {
7852	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
7853	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
7854	// ID - Resource ID.
7855	ID *string `json:"id,omitempty"`
7856	// Name - READ-ONLY; Resource name.
7857	Name *string `json:"name,omitempty"`
7858	// Type - READ-ONLY; Resource type.
7859	Type *string `json:"type,omitempty"`
7860	// Location - Resource location.
7861	Location *string `json:"location,omitempty"`
7862	// Tags - Resource tags.
7863	Tags map[string]*string `json:"tags"`
7864}
7865
7866// MarshalJSON is the custom marshaler for BgpServiceCommunity.
7867func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
7868	objectMap := make(map[string]interface{})
7869	if bsc.BgpServiceCommunityPropertiesFormat != nil {
7870		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
7871	}
7872	if bsc.ID != nil {
7873		objectMap["id"] = bsc.ID
7874	}
7875	if bsc.Location != nil {
7876		objectMap["location"] = bsc.Location
7877	}
7878	if bsc.Tags != nil {
7879		objectMap["tags"] = bsc.Tags
7880	}
7881	return json.Marshal(objectMap)
7882}
7883
7884// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
7885func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
7886	var m map[string]*json.RawMessage
7887	err := json.Unmarshal(body, &m)
7888	if err != nil {
7889		return err
7890	}
7891	for k, v := range m {
7892		switch k {
7893		case "properties":
7894			if v != nil {
7895				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
7896				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
7897				if err != nil {
7898					return err
7899				}
7900				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
7901			}
7902		case "id":
7903			if v != nil {
7904				var ID string
7905				err = json.Unmarshal(*v, &ID)
7906				if err != nil {
7907					return err
7908				}
7909				bsc.ID = &ID
7910			}
7911		case "name":
7912			if v != nil {
7913				var name string
7914				err = json.Unmarshal(*v, &name)
7915				if err != nil {
7916					return err
7917				}
7918				bsc.Name = &name
7919			}
7920		case "type":
7921			if v != nil {
7922				var typeVar string
7923				err = json.Unmarshal(*v, &typeVar)
7924				if err != nil {
7925					return err
7926				}
7927				bsc.Type = &typeVar
7928			}
7929		case "location":
7930			if v != nil {
7931				var location string
7932				err = json.Unmarshal(*v, &location)
7933				if err != nil {
7934					return err
7935				}
7936				bsc.Location = &location
7937			}
7938		case "tags":
7939			if v != nil {
7940				var tags map[string]*string
7941				err = json.Unmarshal(*v, &tags)
7942				if err != nil {
7943					return err
7944				}
7945				bsc.Tags = tags
7946			}
7947		}
7948	}
7949
7950	return nil
7951}
7952
7953// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
7954type BgpServiceCommunityListResult struct {
7955	autorest.Response `json:"-"`
7956	// Value - A list of service community resources.
7957	Value *[]BgpServiceCommunity `json:"value,omitempty"`
7958	// NextLink - The URL to get the next set of results.
7959	NextLink *string `json:"nextLink,omitempty"`
7960}
7961
7962// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
7963// values.
7964type BgpServiceCommunityListResultIterator struct {
7965	i    int
7966	page BgpServiceCommunityListResultPage
7967}
7968
7969// NextWithContext advances to the next value.  If there was an error making
7970// the request the iterator does not advance and the error is returned.
7971func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
7972	if tracing.IsEnabled() {
7973		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
7974		defer func() {
7975			sc := -1
7976			if iter.Response().Response.Response != nil {
7977				sc = iter.Response().Response.Response.StatusCode
7978			}
7979			tracing.EndSpan(ctx, sc, err)
7980		}()
7981	}
7982	iter.i++
7983	if iter.i < len(iter.page.Values()) {
7984		return nil
7985	}
7986	err = iter.page.NextWithContext(ctx)
7987	if err != nil {
7988		iter.i--
7989		return err
7990	}
7991	iter.i = 0
7992	return nil
7993}
7994
7995// Next advances to the next value.  If there was an error making
7996// the request the iterator does not advance and the error is returned.
7997// Deprecated: Use NextWithContext() instead.
7998func (iter *BgpServiceCommunityListResultIterator) Next() error {
7999	return iter.NextWithContext(context.Background())
8000}
8001
8002// NotDone returns true if the enumeration should be started or is not yet complete.
8003func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
8004	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8005}
8006
8007// Response returns the raw server response from the last page request.
8008func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
8009	return iter.page.Response()
8010}
8011
8012// Value returns the current value or a zero-initialized value if the
8013// iterator has advanced beyond the end of the collection.
8014func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
8015	if !iter.page.NotDone() {
8016		return BgpServiceCommunity{}
8017	}
8018	return iter.page.Values()[iter.i]
8019}
8020
8021// Creates a new instance of the BgpServiceCommunityListResultIterator type.
8022func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
8023	return BgpServiceCommunityListResultIterator{page: page}
8024}
8025
8026// IsEmpty returns true if the ListResult contains no values.
8027func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
8028	return bsclr.Value == nil || len(*bsclr.Value) == 0
8029}
8030
8031// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
8032// It returns nil if no more results exist.
8033func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
8034	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
8035		return nil, nil
8036	}
8037	return autorest.Prepare((&http.Request{}).WithContext(ctx),
8038		autorest.AsJSON(),
8039		autorest.AsGet(),
8040		autorest.WithBaseURL(to.String(bsclr.NextLink)))
8041}
8042
8043// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
8044type BgpServiceCommunityListResultPage struct {
8045	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
8046	bsclr BgpServiceCommunityListResult
8047}
8048
8049// NextWithContext advances to the next page of values.  If there was an error making
8050// the request the page does not advance and the error is returned.
8051func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
8052	if tracing.IsEnabled() {
8053		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
8054		defer func() {
8055			sc := -1
8056			if page.Response().Response.Response != nil {
8057				sc = page.Response().Response.Response.StatusCode
8058			}
8059			tracing.EndSpan(ctx, sc, err)
8060		}()
8061	}
8062	next, err := page.fn(ctx, page.bsclr)
8063	if err != nil {
8064		return err
8065	}
8066	page.bsclr = next
8067	return nil
8068}
8069
8070// Next advances to the next page of values.  If there was an error making
8071// the request the page does not advance and the error is returned.
8072// Deprecated: Use NextWithContext() instead.
8073func (page *BgpServiceCommunityListResultPage) Next() error {
8074	return page.NextWithContext(context.Background())
8075}
8076
8077// NotDone returns true if the page enumeration should be started or is not yet complete.
8078func (page BgpServiceCommunityListResultPage) NotDone() bool {
8079	return !page.bsclr.IsEmpty()
8080}
8081
8082// Response returns the raw server response from the last page request.
8083func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
8084	return page.bsclr
8085}
8086
8087// Values returns the slice of values for the current page or nil if there are no values.
8088func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
8089	if page.bsclr.IsEmpty() {
8090		return nil
8091	}
8092	return *page.bsclr.Value
8093}
8094
8095// Creates a new instance of the BgpServiceCommunityListResultPage type.
8096func NewBgpServiceCommunityListResultPage(getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
8097	return BgpServiceCommunityListResultPage{fn: getNextPage}
8098}
8099
8100// BgpServiceCommunityPropertiesFormat properties of Service Community.
8101type BgpServiceCommunityPropertiesFormat struct {
8102	// ServiceName - The name of the bgp community. e.g. Skype.
8103	ServiceName *string `json:"serviceName,omitempty"`
8104	// BgpCommunities - A list of bgp communities.
8105	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
8106}
8107
8108// BgpSettings BGP settings details.
8109type BgpSettings struct {
8110	// Asn - The BGP speaker's ASN.
8111	Asn *int64 `json:"asn,omitempty"`
8112	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
8113	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
8114	// PeerWeight - The weight added to routes learned from this BGP speaker.
8115	PeerWeight *int32 `json:"peerWeight,omitempty"`
8116}
8117
8118// CheckPrivateLinkServiceVisibilityRequest request body of the CheckPrivateLinkServiceVisibility API
8119// service call.
8120type CheckPrivateLinkServiceVisibilityRequest struct {
8121	// PrivateLinkServiceAlias - The alias of the private link service.
8122	PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"`
8123}
8124
8125// CloudError an error response from the Batch service.
8126type CloudError struct {
8127	// Error - Cloud error body.
8128	Error *CloudErrorBody `json:"error,omitempty"`
8129}
8130
8131// CloudErrorBody an error response from the Batch service.
8132type CloudErrorBody struct {
8133	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
8134	Code *string `json:"code,omitempty"`
8135	// Message - A message describing the error, intended to be suitable for display in a user interface.
8136	Message *string `json:"message,omitempty"`
8137	// Target - The target of the particular error. For example, the name of the property in error.
8138	Target *string `json:"target,omitempty"`
8139	// Details - A list of additional details about the error.
8140	Details *[]CloudErrorBody `json:"details,omitempty"`
8141}
8142
8143// ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
8144type ConfigurationDiagnosticParameters struct {
8145	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
8146	TargetResourceID *string `json:"targetResourceId,omitempty"`
8147	// VerbosityLevel - Verbosity level. Possible values include: 'Normal', 'Minimum', 'Full'
8148	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
8149	// Profiles - List of network configuration diagnostic profiles.
8150	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
8151}
8152
8153// ConfigurationDiagnosticProfile parameters to compare with network configuration.
8154type ConfigurationDiagnosticProfile struct {
8155	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
8156	Direction Direction `json:"direction,omitempty"`
8157	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
8158	Protocol *string `json:"protocol,omitempty"`
8159	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
8160	Source *string `json:"source,omitempty"`
8161	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
8162	Destination *string `json:"destination,omitempty"`
8163	// DestinationPort - Traffic destination port. Accepted values are '*', port (for example, 3389) and port range (for example, 80-100).
8164	DestinationPort *string `json:"destinationPort,omitempty"`
8165}
8166
8167// ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
8168type ConfigurationDiagnosticResponse struct {
8169	autorest.Response `json:"-"`
8170	// Results - READ-ONLY; List of network configuration diagnostic results.
8171	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
8172}
8173
8174// ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
8175// query.
8176type ConfigurationDiagnosticResult struct {
8177	// Profile - Network configuration diagnostic profile.
8178	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
8179	// NetworkSecurityGroupResult - Network security group result.
8180	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
8181}
8182
8183// ConnectionMonitor parameters that define the operation to create a connection monitor.
8184type ConnectionMonitor struct {
8185	// Location - Connection monitor location.
8186	Location *string `json:"location,omitempty"`
8187	// Tags - Connection monitor tags.
8188	Tags map[string]*string `json:"tags"`
8189	// ConnectionMonitorParameters - Properties of the connection monitor.
8190	*ConnectionMonitorParameters `json:"properties,omitempty"`
8191}
8192
8193// MarshalJSON is the custom marshaler for ConnectionMonitor.
8194func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
8195	objectMap := make(map[string]interface{})
8196	if cm.Location != nil {
8197		objectMap["location"] = cm.Location
8198	}
8199	if cm.Tags != nil {
8200		objectMap["tags"] = cm.Tags
8201	}
8202	if cm.ConnectionMonitorParameters != nil {
8203		objectMap["properties"] = cm.ConnectionMonitorParameters
8204	}
8205	return json.Marshal(objectMap)
8206}
8207
8208// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
8209func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
8210	var m map[string]*json.RawMessage
8211	err := json.Unmarshal(body, &m)
8212	if err != nil {
8213		return err
8214	}
8215	for k, v := range m {
8216		switch k {
8217		case "location":
8218			if v != nil {
8219				var location string
8220				err = json.Unmarshal(*v, &location)
8221				if err != nil {
8222					return err
8223				}
8224				cm.Location = &location
8225			}
8226		case "tags":
8227			if v != nil {
8228				var tags map[string]*string
8229				err = json.Unmarshal(*v, &tags)
8230				if err != nil {
8231					return err
8232				}
8233				cm.Tags = tags
8234			}
8235		case "properties":
8236			if v != nil {
8237				var connectionMonitorParameters ConnectionMonitorParameters
8238				err = json.Unmarshal(*v, &connectionMonitorParameters)
8239				if err != nil {
8240					return err
8241				}
8242				cm.ConnectionMonitorParameters = &connectionMonitorParameters
8243			}
8244		}
8245	}
8246
8247	return nil
8248}
8249
8250// ConnectionMonitorDestination describes the destination of connection monitor.
8251type ConnectionMonitorDestination struct {
8252	// ResourceID - The ID of the resource used as the destination by connection monitor.
8253	ResourceID *string `json:"resourceId,omitempty"`
8254	// Address - Address of the connection monitor destination (IP or domain name).
8255	Address *string `json:"address,omitempty"`
8256	// Port - The destination port used by connection monitor.
8257	Port *int32 `json:"port,omitempty"`
8258}
8259
8260// ConnectionMonitorListResult list of connection monitors.
8261type ConnectionMonitorListResult struct {
8262	autorest.Response `json:"-"`
8263	// Value - Information about connection monitors.
8264	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
8265}
8266
8267// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
8268type ConnectionMonitorParameters struct {
8269	// Source - Describes the source of connection monitor.
8270	Source *ConnectionMonitorSource `json:"source,omitempty"`
8271	// Destination - Describes the destination of connection monitor.
8272	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
8273	// AutoStart - Determines if the connection monitor will start automatically once created.
8274	AutoStart *bool `json:"autoStart,omitempty"`
8275	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
8276	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
8277}
8278
8279// ConnectionMonitorQueryResult list of connection states snapshots.
8280type ConnectionMonitorQueryResult struct {
8281	autorest.Response `json:"-"`
8282	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
8283	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
8284	// States - Information about connection states.
8285	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
8286}
8287
8288// ConnectionMonitorResult information about the connection monitor.
8289type ConnectionMonitorResult struct {
8290	autorest.Response `json:"-"`
8291	// Name - READ-ONLY; Name of the connection monitor.
8292	Name *string `json:"name,omitempty"`
8293	// ID - READ-ONLY; ID of the connection monitor.
8294	ID *string `json:"id,omitempty"`
8295	// Etag - A unique read-only string that changes whenever the resource is updated.
8296	Etag *string `json:"etag,omitempty"`
8297	// Type - READ-ONLY; Connection monitor type.
8298	Type *string `json:"type,omitempty"`
8299	// Location - Connection monitor location.
8300	Location *string `json:"location,omitempty"`
8301	// Tags - Connection monitor tags.
8302	Tags map[string]*string `json:"tags"`
8303	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
8304	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
8305}
8306
8307// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
8308func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
8309	objectMap := make(map[string]interface{})
8310	if cmr.Etag != nil {
8311		objectMap["etag"] = cmr.Etag
8312	}
8313	if cmr.Location != nil {
8314		objectMap["location"] = cmr.Location
8315	}
8316	if cmr.Tags != nil {
8317		objectMap["tags"] = cmr.Tags
8318	}
8319	if cmr.ConnectionMonitorResultProperties != nil {
8320		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
8321	}
8322	return json.Marshal(objectMap)
8323}
8324
8325// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
8326func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
8327	var m map[string]*json.RawMessage
8328	err := json.Unmarshal(body, &m)
8329	if err != nil {
8330		return err
8331	}
8332	for k, v := range m {
8333		switch k {
8334		case "name":
8335			if v != nil {
8336				var name string
8337				err = json.Unmarshal(*v, &name)
8338				if err != nil {
8339					return err
8340				}
8341				cmr.Name = &name
8342			}
8343		case "id":
8344			if v != nil {
8345				var ID string
8346				err = json.Unmarshal(*v, &ID)
8347				if err != nil {
8348					return err
8349				}
8350				cmr.ID = &ID
8351			}
8352		case "etag":
8353			if v != nil {
8354				var etag string
8355				err = json.Unmarshal(*v, &etag)
8356				if err != nil {
8357					return err
8358				}
8359				cmr.Etag = &etag
8360			}
8361		case "type":
8362			if v != nil {
8363				var typeVar string
8364				err = json.Unmarshal(*v, &typeVar)
8365				if err != nil {
8366					return err
8367				}
8368				cmr.Type = &typeVar
8369			}
8370		case "location":
8371			if v != nil {
8372				var location string
8373				err = json.Unmarshal(*v, &location)
8374				if err != nil {
8375					return err
8376				}
8377				cmr.Location = &location
8378			}
8379		case "tags":
8380			if v != nil {
8381				var tags map[string]*string
8382				err = json.Unmarshal(*v, &tags)
8383				if err != nil {
8384					return err
8385				}
8386				cmr.Tags = tags
8387			}
8388		case "properties":
8389			if v != nil {
8390				var connectionMonitorResultProperties ConnectionMonitorResultProperties
8391				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
8392				if err != nil {
8393					return err
8394				}
8395				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
8396			}
8397		}
8398	}
8399
8400	return nil
8401}
8402
8403// ConnectionMonitorResultProperties describes the properties of a connection monitor.
8404type ConnectionMonitorResultProperties struct {
8405	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8406	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8407	// StartTime - The date and time when the connection monitor was started.
8408	StartTime *date.Time `json:"startTime,omitempty"`
8409	// MonitoringStatus - The monitoring status of the connection monitor.
8410	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
8411	// Source - Describes the source of connection monitor.
8412	Source *ConnectionMonitorSource `json:"source,omitempty"`
8413	// Destination - Describes the destination of connection monitor.
8414	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
8415	// AutoStart - Determines if the connection monitor will start automatically once created.
8416	AutoStart *bool `json:"autoStart,omitempty"`
8417	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
8418	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
8419}
8420
8421// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8422// long-running operation.
8423type ConnectionMonitorsCreateOrUpdateFuture struct {
8424	azure.Future
8425}
8426
8427// Result returns the result of the asynchronous operation.
8428// If the operation has not completed it will return an error.
8429func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
8430	var done bool
8431	done, err = future.DoneWithContext(context.Background(), client)
8432	if err != nil {
8433		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8434		return
8435	}
8436	if !done {
8437		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
8438		return
8439	}
8440	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8441	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
8442		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
8443		if err != nil {
8444			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
8445		}
8446	}
8447	return
8448}
8449
8450// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
8451// long-running operation.
8452type ConnectionMonitorsDeleteFuture struct {
8453	azure.Future
8454}
8455
8456// Result returns the result of the asynchronous operation.
8457// If the operation has not completed it will return an error.
8458func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8459	var done bool
8460	done, err = future.DoneWithContext(context.Background(), client)
8461	if err != nil {
8462		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
8463		return
8464	}
8465	if !done {
8466		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
8467		return
8468	}
8469	ar.Response = future.Response()
8470	return
8471}
8472
8473// ConnectionMonitorSource describes the source of connection monitor.
8474type ConnectionMonitorSource struct {
8475	// ResourceID - The ID of the resource used as the source by connection monitor.
8476	ResourceID *string `json:"resourceId,omitempty"`
8477	// Port - The source port used by connection monitor.
8478	Port *int32 `json:"port,omitempty"`
8479}
8480
8481// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
8482// operation.
8483type ConnectionMonitorsQueryFuture struct {
8484	azure.Future
8485}
8486
8487// Result returns the result of the asynchronous operation.
8488// If the operation has not completed it will return an error.
8489func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
8490	var done bool
8491	done, err = future.DoneWithContext(context.Background(), client)
8492	if err != nil {
8493		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
8494		return
8495	}
8496	if !done {
8497		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
8498		return
8499	}
8500	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8501	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
8502		cmqr, err = client.QueryResponder(cmqr.Response.Response)
8503		if err != nil {
8504			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
8505		}
8506	}
8507	return
8508}
8509
8510// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
8511// operation.
8512type ConnectionMonitorsStartFuture struct {
8513	azure.Future
8514}
8515
8516// Result returns the result of the asynchronous operation.
8517// If the operation has not completed it will return an error.
8518func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8519	var done bool
8520	done, err = future.DoneWithContext(context.Background(), client)
8521	if err != nil {
8522		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
8523		return
8524	}
8525	if !done {
8526		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
8527		return
8528	}
8529	ar.Response = future.Response()
8530	return
8531}
8532
8533// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
8534// operation.
8535type ConnectionMonitorsStopFuture struct {
8536	azure.Future
8537}
8538
8539// Result returns the result of the asynchronous operation.
8540// If the operation has not completed it will return an error.
8541func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
8542	var done bool
8543	done, err = future.DoneWithContext(context.Background(), client)
8544	if err != nil {
8545		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
8546		return
8547	}
8548	if !done {
8549		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
8550		return
8551	}
8552	ar.Response = future.Response()
8553	return
8554}
8555
8556// ConnectionResetSharedKey the virtual network connection reset shared key.
8557type ConnectionResetSharedKey struct {
8558	autorest.Response `json:"-"`
8559	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
8560	KeyLength *int32 `json:"keyLength,omitempty"`
8561}
8562
8563// ConnectionSharedKey response for GetConnectionSharedKey API service call.
8564type ConnectionSharedKey struct {
8565	autorest.Response `json:"-"`
8566	// Value - The virtual network connection shared key value.
8567	Value *string `json:"value,omitempty"`
8568	// ID - Resource ID.
8569	ID *string `json:"id,omitempty"`
8570}
8571
8572// ConnectionStateSnapshot connection state snapshot.
8573type ConnectionStateSnapshot struct {
8574	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
8575	ConnectionState ConnectionState `json:"connectionState,omitempty"`
8576	// StartTime - The start time of the connection snapshot.
8577	StartTime *date.Time `json:"startTime,omitempty"`
8578	// EndTime - The end time of the connection snapshot.
8579	EndTime *date.Time `json:"endTime,omitempty"`
8580	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
8581	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
8582	// AvgLatencyInMs - Average latency in ms.
8583	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
8584	// MinLatencyInMs - Minimum latency in ms.
8585	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
8586	// MaxLatencyInMs - Maximum latency in ms.
8587	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
8588	// ProbesSent - The number of sent probes.
8589	ProbesSent *int32 `json:"probesSent,omitempty"`
8590	// ProbesFailed - The number of failed probes.
8591	ProbesFailed *int32 `json:"probesFailed,omitempty"`
8592	// Hops - READ-ONLY; List of hops between the source and the destination.
8593	Hops *[]ConnectivityHop `json:"hops,omitempty"`
8594}
8595
8596// ConnectivityDestination parameters that define destination of connection.
8597type ConnectivityDestination struct {
8598	// ResourceID - The ID of the resource to which a connection attempt will be made.
8599	ResourceID *string `json:"resourceId,omitempty"`
8600	// Address - The IP address or URI the resource to which a connection attempt will be made.
8601	Address *string `json:"address,omitempty"`
8602	// Port - Port on which check connectivity will be performed.
8603	Port *int32 `json:"port,omitempty"`
8604}
8605
8606// ConnectivityHop information about a hop between the source and the destination.
8607type ConnectivityHop struct {
8608	// Type - READ-ONLY; The type of the hop.
8609	Type *string `json:"type,omitempty"`
8610	// ID - READ-ONLY; The ID of the hop.
8611	ID *string `json:"id,omitempty"`
8612	// Address - READ-ONLY; The IP address of the hop.
8613	Address *string `json:"address,omitempty"`
8614	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
8615	ResourceID *string `json:"resourceId,omitempty"`
8616	// NextHopIds - READ-ONLY; List of next hop identifiers.
8617	NextHopIds *[]string `json:"nextHopIds,omitempty"`
8618	// Issues - READ-ONLY; List of issues.
8619	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
8620}
8621
8622// ConnectivityInformation information on the connectivity status.
8623type ConnectivityInformation struct {
8624	autorest.Response `json:"-"`
8625	// Hops - READ-ONLY; List of hops between the source and the destination.
8626	Hops *[]ConnectivityHop `json:"hops,omitempty"`
8627	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
8628	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
8629	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
8630	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
8631	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
8632	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
8633	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
8634	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
8635	// ProbesSent - READ-ONLY; Total number of probes sent.
8636	ProbesSent *int32 `json:"probesSent,omitempty"`
8637	// ProbesFailed - READ-ONLY; Number of failed probes.
8638	ProbesFailed *int32 `json:"probesFailed,omitempty"`
8639}
8640
8641// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
8642type ConnectivityIssue struct {
8643	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
8644	Origin Origin `json:"origin,omitempty"`
8645	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
8646	Severity Severity `json:"severity,omitempty"`
8647	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
8648	Type IssueType `json:"type,omitempty"`
8649	// Context - READ-ONLY; Provides additional context on the issue.
8650	Context *[]map[string]*string `json:"context,omitempty"`
8651}
8652
8653// ConnectivityParameters parameters that determine how the connectivity check will be performed.
8654type ConnectivityParameters struct {
8655	// Source - Describes the source of the connection.
8656	Source *ConnectivitySource `json:"source,omitempty"`
8657	// Destination - Describes the destination of connection.
8658	Destination *ConnectivityDestination `json:"destination,omitempty"`
8659	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
8660	Protocol Protocol `json:"protocol,omitempty"`
8661	// ProtocolConfiguration - Configuration of the protocol.
8662	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
8663}
8664
8665// ConnectivitySource parameters that define the source of the connection.
8666type ConnectivitySource struct {
8667	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
8668	ResourceID *string `json:"resourceId,omitempty"`
8669	// Port - The source port from which a connectivity check will be performed.
8670	Port *int32 `json:"port,omitempty"`
8671}
8672
8673// Container reference to container resource in remote resource provider.
8674type Container struct {
8675	// ID - Resource ID.
8676	ID *string `json:"id,omitempty"`
8677}
8678
8679// ContainerNetworkInterface container network interface child resource.
8680type ContainerNetworkInterface struct {
8681	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
8682	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
8683	// Name - The name of the resource. This name can be used to access the resource.
8684	Name *string `json:"name,omitempty"`
8685	// Type - READ-ONLY; Sub Resource type.
8686	Type *string `json:"type,omitempty"`
8687	// Etag - A unique read-only string that changes whenever the resource is updated.
8688	Etag *string `json:"etag,omitempty"`
8689	// ID - Resource ID.
8690	ID *string `json:"id,omitempty"`
8691}
8692
8693// MarshalJSON is the custom marshaler for ContainerNetworkInterface.
8694func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
8695	objectMap := make(map[string]interface{})
8696	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
8697		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
8698	}
8699	if cni.Name != nil {
8700		objectMap["name"] = cni.Name
8701	}
8702	if cni.Etag != nil {
8703		objectMap["etag"] = cni.Etag
8704	}
8705	if cni.ID != nil {
8706		objectMap["id"] = cni.ID
8707	}
8708	return json.Marshal(objectMap)
8709}
8710
8711// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
8712func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
8713	var m map[string]*json.RawMessage
8714	err := json.Unmarshal(body, &m)
8715	if err != nil {
8716		return err
8717	}
8718	for k, v := range m {
8719		switch k {
8720		case "properties":
8721			if v != nil {
8722				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
8723				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
8724				if err != nil {
8725					return err
8726				}
8727				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
8728			}
8729		case "name":
8730			if v != nil {
8731				var name string
8732				err = json.Unmarshal(*v, &name)
8733				if err != nil {
8734					return err
8735				}
8736				cni.Name = &name
8737			}
8738		case "type":
8739			if v != nil {
8740				var typeVar string
8741				err = json.Unmarshal(*v, &typeVar)
8742				if err != nil {
8743					return err
8744				}
8745				cni.Type = &typeVar
8746			}
8747		case "etag":
8748			if v != nil {
8749				var etag string
8750				err = json.Unmarshal(*v, &etag)
8751				if err != nil {
8752					return err
8753				}
8754				cni.Etag = &etag
8755			}
8756		case "id":
8757			if v != nil {
8758				var ID string
8759				err = json.Unmarshal(*v, &ID)
8760				if err != nil {
8761					return err
8762				}
8763				cni.ID = &ID
8764			}
8765		}
8766	}
8767
8768	return nil
8769}
8770
8771// ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
8772type ContainerNetworkInterfaceConfiguration struct {
8773	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
8774	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
8775	// Name - The name of the resource. This name can be used to access the resource.
8776	Name *string `json:"name,omitempty"`
8777	// Type - READ-ONLY; Sub Resource type.
8778	Type *string `json:"type,omitempty"`
8779	// Etag - A unique read-only string that changes whenever the resource is updated.
8780	Etag *string `json:"etag,omitempty"`
8781	// ID - Resource ID.
8782	ID *string `json:"id,omitempty"`
8783}
8784
8785// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
8786func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
8787	objectMap := make(map[string]interface{})
8788	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
8789		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
8790	}
8791	if cnic.Name != nil {
8792		objectMap["name"] = cnic.Name
8793	}
8794	if cnic.Etag != nil {
8795		objectMap["etag"] = cnic.Etag
8796	}
8797	if cnic.ID != nil {
8798		objectMap["id"] = cnic.ID
8799	}
8800	return json.Marshal(objectMap)
8801}
8802
8803// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
8804func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
8805	var m map[string]*json.RawMessage
8806	err := json.Unmarshal(body, &m)
8807	if err != nil {
8808		return err
8809	}
8810	for k, v := range m {
8811		switch k {
8812		case "properties":
8813			if v != nil {
8814				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
8815				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
8816				if err != nil {
8817					return err
8818				}
8819				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
8820			}
8821		case "name":
8822			if v != nil {
8823				var name string
8824				err = json.Unmarshal(*v, &name)
8825				if err != nil {
8826					return err
8827				}
8828				cnic.Name = &name
8829			}
8830		case "type":
8831			if v != nil {
8832				var typeVar string
8833				err = json.Unmarshal(*v, &typeVar)
8834				if err != nil {
8835					return err
8836				}
8837				cnic.Type = &typeVar
8838			}
8839		case "etag":
8840			if v != nil {
8841				var etag string
8842				err = json.Unmarshal(*v, &etag)
8843				if err != nil {
8844					return err
8845				}
8846				cnic.Etag = &etag
8847			}
8848		case "id":
8849			if v != nil {
8850				var ID string
8851				err = json.Unmarshal(*v, &ID)
8852				if err != nil {
8853					return err
8854				}
8855				cnic.ID = &ID
8856			}
8857		}
8858	}
8859
8860	return nil
8861}
8862
8863// ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
8864// properties.
8865type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
8866	// IPConfigurations - A list of ip configurations of the container network interface configuration.
8867	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
8868	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
8869	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
8870	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8871	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8872}
8873
8874// ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
8875type ContainerNetworkInterfaceIPConfiguration struct {
8876	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
8877	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
8878	// Name - The name of the resource. This name can be used to access the resource.
8879	Name *string `json:"name,omitempty"`
8880	// Type - READ-ONLY; Sub Resource type.
8881	Type *string `json:"type,omitempty"`
8882	// Etag - A unique read-only string that changes whenever the resource is updated.
8883	Etag *string `json:"etag,omitempty"`
8884}
8885
8886// MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
8887func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
8888	objectMap := make(map[string]interface{})
8889	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
8890		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
8891	}
8892	if cniic.Name != nil {
8893		objectMap["name"] = cniic.Name
8894	}
8895	if cniic.Etag != nil {
8896		objectMap["etag"] = cniic.Etag
8897	}
8898	return json.Marshal(objectMap)
8899}
8900
8901// UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
8902func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
8903	var m map[string]*json.RawMessage
8904	err := json.Unmarshal(body, &m)
8905	if err != nil {
8906		return err
8907	}
8908	for k, v := range m {
8909		switch k {
8910		case "properties":
8911			if v != nil {
8912				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
8913				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
8914				if err != nil {
8915					return err
8916				}
8917				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
8918			}
8919		case "name":
8920			if v != nil {
8921				var name string
8922				err = json.Unmarshal(*v, &name)
8923				if err != nil {
8924					return err
8925				}
8926				cniic.Name = &name
8927			}
8928		case "type":
8929			if v != nil {
8930				var typeVar string
8931				err = json.Unmarshal(*v, &typeVar)
8932				if err != nil {
8933					return err
8934				}
8935				cniic.Type = &typeVar
8936			}
8937		case "etag":
8938			if v != nil {
8939				var etag string
8940				err = json.Unmarshal(*v, &etag)
8941				if err != nil {
8942					return err
8943				}
8944				cniic.Etag = &etag
8945			}
8946		}
8947	}
8948
8949	return nil
8950}
8951
8952// ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
8953// IP configuration.
8954type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
8955	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8956	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8957}
8958
8959// ContainerNetworkInterfacePropertiesFormat properties of container network interface.
8960type ContainerNetworkInterfacePropertiesFormat struct {
8961	// ContainerNetworkInterfaceConfiguration - Container network interface configuration from which this container network interface is created.
8962	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
8963	// Container - Reference to the container to which this container network interface is attached.
8964	Container *Container `json:"container,omitempty"`
8965	// IPConfigurations - Reference to the ip configuration on this container nic.
8966	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
8967	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
8968	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
8969}
8970
8971// DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
8972// long-running operation.
8973type DdosCustomPoliciesCreateOrUpdateFuture struct {
8974	azure.Future
8975}
8976
8977// Result returns the result of the asynchronous operation.
8978// If the operation has not completed it will return an error.
8979func (future *DdosCustomPoliciesCreateOrUpdateFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
8980	var done bool
8981	done, err = future.DoneWithContext(context.Background(), client)
8982	if err != nil {
8983		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8984		return
8985	}
8986	if !done {
8987		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
8988		return
8989	}
8990	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8991	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
8992		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
8993		if err != nil {
8994			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
8995		}
8996	}
8997	return
8998}
8999
9000// DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
9001// long-running operation.
9002type DdosCustomPoliciesDeleteFuture struct {
9003	azure.Future
9004}
9005
9006// Result returns the result of the asynchronous operation.
9007// If the operation has not completed it will return an error.
9008func (future *DdosCustomPoliciesDeleteFuture) Result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
9009	var done bool
9010	done, err = future.DoneWithContext(context.Background(), client)
9011	if err != nil {
9012		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
9013		return
9014	}
9015	if !done {
9016		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
9017		return
9018	}
9019	ar.Response = future.Response()
9020	return
9021}
9022
9023// DdosCustomPoliciesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
9024// long-running operation.
9025type DdosCustomPoliciesUpdateTagsFuture struct {
9026	azure.Future
9027}
9028
9029// Result returns the result of the asynchronous operation.
9030// If the operation has not completed it will return an error.
9031func (future *DdosCustomPoliciesUpdateTagsFuture) Result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
9032	var done bool
9033	done, err = future.DoneWithContext(context.Background(), client)
9034	if err != nil {
9035		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9036		return
9037	}
9038	if !done {
9039		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesUpdateTagsFuture")
9040		return
9041	}
9042	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9043	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
9044		dcp, err = client.UpdateTagsResponder(dcp.Response.Response)
9045		if err != nil {
9046			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesUpdateTagsFuture", "Result", dcp.Response.Response, "Failure responding to request")
9047		}
9048	}
9049	return
9050}
9051
9052// DdosCustomPolicy a DDoS custom policy in a resource group.
9053type DdosCustomPolicy struct {
9054	autorest.Response `json:"-"`
9055	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
9056	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
9057	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9058	Etag *string `json:"etag,omitempty"`
9059	// ID - Resource ID.
9060	ID *string `json:"id,omitempty"`
9061	// Name - READ-ONLY; Resource name.
9062	Name *string `json:"name,omitempty"`
9063	// Type - READ-ONLY; Resource type.
9064	Type *string `json:"type,omitempty"`
9065	// Location - Resource location.
9066	Location *string `json:"location,omitempty"`
9067	// Tags - Resource tags.
9068	Tags map[string]*string `json:"tags"`
9069}
9070
9071// MarshalJSON is the custom marshaler for DdosCustomPolicy.
9072func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
9073	objectMap := make(map[string]interface{})
9074	if dcp.DdosCustomPolicyPropertiesFormat != nil {
9075		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
9076	}
9077	if dcp.ID != nil {
9078		objectMap["id"] = dcp.ID
9079	}
9080	if dcp.Location != nil {
9081		objectMap["location"] = dcp.Location
9082	}
9083	if dcp.Tags != nil {
9084		objectMap["tags"] = dcp.Tags
9085	}
9086	return json.Marshal(objectMap)
9087}
9088
9089// UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
9090func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
9091	var m map[string]*json.RawMessage
9092	err := json.Unmarshal(body, &m)
9093	if err != nil {
9094		return err
9095	}
9096	for k, v := range m {
9097		switch k {
9098		case "properties":
9099			if v != nil {
9100				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
9101				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
9102				if err != nil {
9103					return err
9104				}
9105				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
9106			}
9107		case "etag":
9108			if v != nil {
9109				var etag string
9110				err = json.Unmarshal(*v, &etag)
9111				if err != nil {
9112					return err
9113				}
9114				dcp.Etag = &etag
9115			}
9116		case "id":
9117			if v != nil {
9118				var ID string
9119				err = json.Unmarshal(*v, &ID)
9120				if err != nil {
9121					return err
9122				}
9123				dcp.ID = &ID
9124			}
9125		case "name":
9126			if v != nil {
9127				var name string
9128				err = json.Unmarshal(*v, &name)
9129				if err != nil {
9130					return err
9131				}
9132				dcp.Name = &name
9133			}
9134		case "type":
9135			if v != nil {
9136				var typeVar string
9137				err = json.Unmarshal(*v, &typeVar)
9138				if err != nil {
9139					return err
9140				}
9141				dcp.Type = &typeVar
9142			}
9143		case "location":
9144			if v != nil {
9145				var location string
9146				err = json.Unmarshal(*v, &location)
9147				if err != nil {
9148					return err
9149				}
9150				dcp.Location = &location
9151			}
9152		case "tags":
9153			if v != nil {
9154				var tags map[string]*string
9155				err = json.Unmarshal(*v, &tags)
9156				if err != nil {
9157					return err
9158				}
9159				dcp.Tags = tags
9160			}
9161		}
9162	}
9163
9164	return nil
9165}
9166
9167// DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
9168type DdosCustomPolicyPropertiesFormat struct {
9169	// 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.
9170	ResourceGUID *string `json:"resourceGuid,omitempty"`
9171	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9172	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9173	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
9174	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
9175	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
9176	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
9177}
9178
9179// DdosProtectionPlan a DDoS protection plan in a resource group.
9180type DdosProtectionPlan struct {
9181	autorest.Response `json:"-"`
9182	// ID - READ-ONLY; Resource ID.
9183	ID *string `json:"id,omitempty"`
9184	// Name - READ-ONLY; Resource name.
9185	Name *string `json:"name,omitempty"`
9186	// Type - READ-ONLY; Resource type.
9187	Type *string `json:"type,omitempty"`
9188	// Location - Resource location.
9189	Location *string `json:"location,omitempty"`
9190	// Tags - Resource tags.
9191	Tags map[string]*string `json:"tags"`
9192	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
9193	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
9194	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9195	Etag *string `json:"etag,omitempty"`
9196}
9197
9198// MarshalJSON is the custom marshaler for DdosProtectionPlan.
9199func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
9200	objectMap := make(map[string]interface{})
9201	if dpp.Location != nil {
9202		objectMap["location"] = dpp.Location
9203	}
9204	if dpp.Tags != nil {
9205		objectMap["tags"] = dpp.Tags
9206	}
9207	if dpp.DdosProtectionPlanPropertiesFormat != nil {
9208		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
9209	}
9210	return json.Marshal(objectMap)
9211}
9212
9213// UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
9214func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
9215	var m map[string]*json.RawMessage
9216	err := json.Unmarshal(body, &m)
9217	if err != nil {
9218		return err
9219	}
9220	for k, v := range m {
9221		switch k {
9222		case "id":
9223			if v != nil {
9224				var ID string
9225				err = json.Unmarshal(*v, &ID)
9226				if err != nil {
9227					return err
9228				}
9229				dpp.ID = &ID
9230			}
9231		case "name":
9232			if v != nil {
9233				var name string
9234				err = json.Unmarshal(*v, &name)
9235				if err != nil {
9236					return err
9237				}
9238				dpp.Name = &name
9239			}
9240		case "type":
9241			if v != nil {
9242				var typeVar string
9243				err = json.Unmarshal(*v, &typeVar)
9244				if err != nil {
9245					return err
9246				}
9247				dpp.Type = &typeVar
9248			}
9249		case "location":
9250			if v != nil {
9251				var location string
9252				err = json.Unmarshal(*v, &location)
9253				if err != nil {
9254					return err
9255				}
9256				dpp.Location = &location
9257			}
9258		case "tags":
9259			if v != nil {
9260				var tags map[string]*string
9261				err = json.Unmarshal(*v, &tags)
9262				if err != nil {
9263					return err
9264				}
9265				dpp.Tags = tags
9266			}
9267		case "properties":
9268			if v != nil {
9269				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
9270				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
9271				if err != nil {
9272					return err
9273				}
9274				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
9275			}
9276		case "etag":
9277			if v != nil {
9278				var etag string
9279				err = json.Unmarshal(*v, &etag)
9280				if err != nil {
9281					return err
9282				}
9283				dpp.Etag = &etag
9284			}
9285		}
9286	}
9287
9288	return nil
9289}
9290
9291// DdosProtectionPlanListResult a list of DDoS protection plans.
9292type DdosProtectionPlanListResult struct {
9293	autorest.Response `json:"-"`
9294	// Value - A list of DDoS protection plans.
9295	Value *[]DdosProtectionPlan `json:"value,omitempty"`
9296	// NextLink - READ-ONLY; The URL to get the next set of results.
9297	NextLink *string `json:"nextLink,omitempty"`
9298}
9299
9300// DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
9301type DdosProtectionPlanListResultIterator struct {
9302	i    int
9303	page DdosProtectionPlanListResultPage
9304}
9305
9306// NextWithContext advances to the next value.  If there was an error making
9307// the request the iterator does not advance and the error is returned.
9308func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
9309	if tracing.IsEnabled() {
9310		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
9311		defer func() {
9312			sc := -1
9313			if iter.Response().Response.Response != nil {
9314				sc = iter.Response().Response.Response.StatusCode
9315			}
9316			tracing.EndSpan(ctx, sc, err)
9317		}()
9318	}
9319	iter.i++
9320	if iter.i < len(iter.page.Values()) {
9321		return nil
9322	}
9323	err = iter.page.NextWithContext(ctx)
9324	if err != nil {
9325		iter.i--
9326		return err
9327	}
9328	iter.i = 0
9329	return nil
9330}
9331
9332// Next advances to the next value.  If there was an error making
9333// the request the iterator does not advance and the error is returned.
9334// Deprecated: Use NextWithContext() instead.
9335func (iter *DdosProtectionPlanListResultIterator) Next() error {
9336	return iter.NextWithContext(context.Background())
9337}
9338
9339// NotDone returns true if the enumeration should be started or is not yet complete.
9340func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
9341	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9342}
9343
9344// Response returns the raw server response from the last page request.
9345func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
9346	return iter.page.Response()
9347}
9348
9349// Value returns the current value or a zero-initialized value if the
9350// iterator has advanced beyond the end of the collection.
9351func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
9352	if !iter.page.NotDone() {
9353		return DdosProtectionPlan{}
9354	}
9355	return iter.page.Values()[iter.i]
9356}
9357
9358// Creates a new instance of the DdosProtectionPlanListResultIterator type.
9359func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
9360	return DdosProtectionPlanListResultIterator{page: page}
9361}
9362
9363// IsEmpty returns true if the ListResult contains no values.
9364func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
9365	return dpplr.Value == nil || len(*dpplr.Value) == 0
9366}
9367
9368// ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
9369// It returns nil if no more results exist.
9370func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
9371	if dpplr.NextLink == nil || len(to.String(dpplr.NextLink)) < 1 {
9372		return nil, nil
9373	}
9374	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9375		autorest.AsJSON(),
9376		autorest.AsGet(),
9377		autorest.WithBaseURL(to.String(dpplr.NextLink)))
9378}
9379
9380// DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
9381type DdosProtectionPlanListResultPage struct {
9382	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
9383	dpplr DdosProtectionPlanListResult
9384}
9385
9386// NextWithContext advances to the next page of values.  If there was an error making
9387// the request the page does not advance and the error is returned.
9388func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
9389	if tracing.IsEnabled() {
9390		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
9391		defer func() {
9392			sc := -1
9393			if page.Response().Response.Response != nil {
9394				sc = page.Response().Response.Response.StatusCode
9395			}
9396			tracing.EndSpan(ctx, sc, err)
9397		}()
9398	}
9399	next, err := page.fn(ctx, page.dpplr)
9400	if err != nil {
9401		return err
9402	}
9403	page.dpplr = next
9404	return nil
9405}
9406
9407// Next advances to the next page of values.  If there was an error making
9408// the request the page does not advance and the error is returned.
9409// Deprecated: Use NextWithContext() instead.
9410func (page *DdosProtectionPlanListResultPage) Next() error {
9411	return page.NextWithContext(context.Background())
9412}
9413
9414// NotDone returns true if the page enumeration should be started or is not yet complete.
9415func (page DdosProtectionPlanListResultPage) NotDone() bool {
9416	return !page.dpplr.IsEmpty()
9417}
9418
9419// Response returns the raw server response from the last page request.
9420func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
9421	return page.dpplr
9422}
9423
9424// Values returns the slice of values for the current page or nil if there are no values.
9425func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
9426	if page.dpplr.IsEmpty() {
9427		return nil
9428	}
9429	return *page.dpplr.Value
9430}
9431
9432// Creates a new instance of the DdosProtectionPlanListResultPage type.
9433func NewDdosProtectionPlanListResultPage(getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
9434	return DdosProtectionPlanListResultPage{fn: getNextPage}
9435}
9436
9437// DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
9438type DdosProtectionPlanPropertiesFormat struct {
9439	// 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.
9440	ResourceGUID *string `json:"resourceGuid,omitempty"`
9441	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9442	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9443	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
9444	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
9445}
9446
9447// DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9448// long-running operation.
9449type DdosProtectionPlansCreateOrUpdateFuture struct {
9450	azure.Future
9451}
9452
9453// Result returns the result of the asynchronous operation.
9454// If the operation has not completed it will return an error.
9455func (future *DdosProtectionPlansCreateOrUpdateFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
9456	var done bool
9457	done, err = future.DoneWithContext(context.Background(), client)
9458	if err != nil {
9459		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9460		return
9461	}
9462	if !done {
9463		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
9464		return
9465	}
9466	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9467	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
9468		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
9469		if err != nil {
9470			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
9471		}
9472	}
9473	return
9474}
9475
9476// DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
9477// long-running operation.
9478type DdosProtectionPlansDeleteFuture struct {
9479	azure.Future
9480}
9481
9482// Result returns the result of the asynchronous operation.
9483// If the operation has not completed it will return an error.
9484func (future *DdosProtectionPlansDeleteFuture) Result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
9485	var done bool
9486	done, err = future.DoneWithContext(context.Background(), client)
9487	if err != nil {
9488		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
9489		return
9490	}
9491	if !done {
9492		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
9493		return
9494	}
9495	ar.Response = future.Response()
9496	return
9497}
9498
9499// DdosProtectionPlansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
9500// long-running operation.
9501type DdosProtectionPlansUpdateTagsFuture struct {
9502	azure.Future
9503}
9504
9505// Result returns the result of the asynchronous operation.
9506// If the operation has not completed it will return an error.
9507func (future *DdosProtectionPlansUpdateTagsFuture) Result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
9508	var done bool
9509	done, err = future.DoneWithContext(context.Background(), client)
9510	if err != nil {
9511		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9512		return
9513	}
9514	if !done {
9515		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansUpdateTagsFuture")
9516		return
9517	}
9518	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9519	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
9520		dpp, err = client.UpdateTagsResponder(dpp.Response.Response)
9521		if err != nil {
9522			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansUpdateTagsFuture", "Result", dpp.Response.Response, "Failure responding to request")
9523		}
9524	}
9525	return
9526}
9527
9528// DdosSettings contains the DDoS protection settings of the public IP.
9529type DdosSettings struct {
9530	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
9531	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
9532	// 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'
9533	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
9534}
9535
9536// Delegation details the service to which the subnet is delegated.
9537type Delegation struct {
9538	// ServiceDelegationPropertiesFormat - Properties of the subnet.
9539	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
9540	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
9541	Name *string `json:"name,omitempty"`
9542	// Etag - A unique read-only string that changes whenever the resource is updated.
9543	Etag *string `json:"etag,omitempty"`
9544	// ID - Resource ID.
9545	ID *string `json:"id,omitempty"`
9546}
9547
9548// MarshalJSON is the custom marshaler for Delegation.
9549func (d Delegation) MarshalJSON() ([]byte, error) {
9550	objectMap := make(map[string]interface{})
9551	if d.ServiceDelegationPropertiesFormat != nil {
9552		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
9553	}
9554	if d.Name != nil {
9555		objectMap["name"] = d.Name
9556	}
9557	if d.Etag != nil {
9558		objectMap["etag"] = d.Etag
9559	}
9560	if d.ID != nil {
9561		objectMap["id"] = d.ID
9562	}
9563	return json.Marshal(objectMap)
9564}
9565
9566// UnmarshalJSON is the custom unmarshaler for Delegation struct.
9567func (d *Delegation) UnmarshalJSON(body []byte) error {
9568	var m map[string]*json.RawMessage
9569	err := json.Unmarshal(body, &m)
9570	if err != nil {
9571		return err
9572	}
9573	for k, v := range m {
9574		switch k {
9575		case "properties":
9576			if v != nil {
9577				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
9578				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
9579				if err != nil {
9580					return err
9581				}
9582				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
9583			}
9584		case "name":
9585			if v != nil {
9586				var name string
9587				err = json.Unmarshal(*v, &name)
9588				if err != nil {
9589					return err
9590				}
9591				d.Name = &name
9592			}
9593		case "etag":
9594			if v != nil {
9595				var etag string
9596				err = json.Unmarshal(*v, &etag)
9597				if err != nil {
9598					return err
9599				}
9600				d.Etag = &etag
9601			}
9602		case "id":
9603			if v != nil {
9604				var ID string
9605				err = json.Unmarshal(*v, &ID)
9606				if err != nil {
9607					return err
9608				}
9609				d.ID = &ID
9610			}
9611		}
9612	}
9613
9614	return nil
9615}
9616
9617// DeviceProperties list of properties of the device.
9618type DeviceProperties struct {
9619	// DeviceVendor - Name of the device Vendor.
9620	DeviceVendor *string `json:"deviceVendor,omitempty"`
9621	// DeviceModel - Model of the device.
9622	DeviceModel *string `json:"deviceModel,omitempty"`
9623	// LinkSpeedInMbps - Link speed.
9624	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
9625}
9626
9627// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
9628// network. Standard DHCP option for a subnet overrides VNET DHCP options.
9629type DhcpOptions struct {
9630	// DNSServers - The list of DNS servers IP addresses.
9631	DNSServers *[]string `json:"dnsServers,omitempty"`
9632}
9633
9634// Dimension dimension of the metric.
9635type Dimension struct {
9636	// Name - The name of the dimension.
9637	Name *string `json:"name,omitempty"`
9638	// DisplayName - The display name of the dimension.
9639	DisplayName *string `json:"displayName,omitempty"`
9640	// InternalName - The internal name of the dimension.
9641	InternalName *string `json:"internalName,omitempty"`
9642}
9643
9644// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
9645type DNSNameAvailabilityResult struct {
9646	autorest.Response `json:"-"`
9647	// Available - Domain availability (True/False).
9648	Available *bool `json:"available,omitempty"`
9649}
9650
9651// EffectiveNetworkSecurityGroup effective network security group.
9652type EffectiveNetworkSecurityGroup struct {
9653	// NetworkSecurityGroup - The ID of network security group that is applied.
9654	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
9655	// Association - Associated resources.
9656	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
9657	// EffectiveSecurityRules - A collection of effective security rules.
9658	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
9659	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
9660	TagMap map[string][]string `json:"tagMap"`
9661}
9662
9663// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
9664func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
9665	objectMap := make(map[string]interface{})
9666	if ensg.NetworkSecurityGroup != nil {
9667		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
9668	}
9669	if ensg.Association != nil {
9670		objectMap["association"] = ensg.Association
9671	}
9672	if ensg.EffectiveSecurityRules != nil {
9673		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
9674	}
9675	if ensg.TagMap != nil {
9676		objectMap["tagMap"] = ensg.TagMap
9677	}
9678	return json.Marshal(objectMap)
9679}
9680
9681// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
9682type EffectiveNetworkSecurityGroupAssociation struct {
9683	// Subnet - The ID of the subnet if assigned.
9684	Subnet *SubResource `json:"subnet,omitempty"`
9685	// NetworkInterface - The ID of the network interface if assigned.
9686	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
9687}
9688
9689// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
9690// call.
9691type EffectiveNetworkSecurityGroupListResult struct {
9692	autorest.Response `json:"-"`
9693	// Value - A list of effective network security groups.
9694	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
9695	// NextLink - READ-ONLY; The URL to get the next set of results.
9696	NextLink *string `json:"nextLink,omitempty"`
9697}
9698
9699// EffectiveNetworkSecurityRule effective network security rules.
9700type EffectiveNetworkSecurityRule struct {
9701	// Name - The name of the security rule specified by the user (if created by the user).
9702	Name *string `json:"name,omitempty"`
9703	// Protocol - The network protocol this rule applies to. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
9704	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
9705	// SourcePortRange - The source port or range.
9706	SourcePortRange *string `json:"sourcePortRange,omitempty"`
9707	// DestinationPortRange - The destination port or range.
9708	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
9709	// 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 (*).
9710	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
9711	// 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 (*).
9712	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
9713	// SourceAddressPrefix - The source address prefix.
9714	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
9715	// DestinationAddressPrefix - The destination address prefix.
9716	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
9717	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
9718	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
9719	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
9720	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
9721	// ExpandedSourceAddressPrefix - The expanded source address prefix.
9722	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
9723	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
9724	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
9725	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
9726	Access SecurityRuleAccess `json:"access,omitempty"`
9727	// Priority - The priority of the rule.
9728	Priority *int32 `json:"priority,omitempty"`
9729	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
9730	Direction SecurityRuleDirection `json:"direction,omitempty"`
9731}
9732
9733// EffectiveRoute effective Route.
9734type EffectiveRoute struct {
9735	// Name - The name of the user defined route. This is optional.
9736	Name *string `json:"name,omitempty"`
9737	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
9738	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
9739	// Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
9740	Source EffectiveRouteSource `json:"source,omitempty"`
9741	// State - The value of effective route. Possible values include: 'Active', 'Invalid'
9742	State EffectiveRouteState `json:"state,omitempty"`
9743	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
9744	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
9745	// NextHopIPAddress - The IP address of the next hop of the effective route.
9746	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
9747	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
9748	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
9749}
9750
9751// EffectiveRouteListResult response for list effective route API service call.
9752type EffectiveRouteListResult struct {
9753	autorest.Response `json:"-"`
9754	// Value - A list of effective routes.
9755	Value *[]EffectiveRoute `json:"value,omitempty"`
9756	// NextLink - READ-ONLY; The URL to get the next set of results.
9757	NextLink *string `json:"nextLink,omitempty"`
9758}
9759
9760// EndpointServiceResult endpoint service.
9761type EndpointServiceResult struct {
9762	// Name - READ-ONLY; Name of the endpoint service.
9763	Name *string `json:"name,omitempty"`
9764	// Type - READ-ONLY; Type of the endpoint service.
9765	Type *string `json:"type,omitempty"`
9766	// ID - Resource ID.
9767	ID *string `json:"id,omitempty"`
9768}
9769
9770// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
9771type EndpointServicesListResult struct {
9772	autorest.Response `json:"-"`
9773	// Value - List of available endpoint services in a region.
9774	Value *[]EndpointServiceResult `json:"value,omitempty"`
9775	// NextLink - The URL to get the next set of results.
9776	NextLink *string `json:"nextLink,omitempty"`
9777}
9778
9779// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
9780// values.
9781type EndpointServicesListResultIterator struct {
9782	i    int
9783	page EndpointServicesListResultPage
9784}
9785
9786// NextWithContext advances to the next value.  If there was an error making
9787// the request the iterator does not advance and the error is returned.
9788func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
9789	if tracing.IsEnabled() {
9790		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
9791		defer func() {
9792			sc := -1
9793			if iter.Response().Response.Response != nil {
9794				sc = iter.Response().Response.Response.StatusCode
9795			}
9796			tracing.EndSpan(ctx, sc, err)
9797		}()
9798	}
9799	iter.i++
9800	if iter.i < len(iter.page.Values()) {
9801		return nil
9802	}
9803	err = iter.page.NextWithContext(ctx)
9804	if err != nil {
9805		iter.i--
9806		return err
9807	}
9808	iter.i = 0
9809	return nil
9810}
9811
9812// Next advances to the next value.  If there was an error making
9813// the request the iterator does not advance and the error is returned.
9814// Deprecated: Use NextWithContext() instead.
9815func (iter *EndpointServicesListResultIterator) Next() error {
9816	return iter.NextWithContext(context.Background())
9817}
9818
9819// NotDone returns true if the enumeration should be started or is not yet complete.
9820func (iter EndpointServicesListResultIterator) NotDone() bool {
9821	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9822}
9823
9824// Response returns the raw server response from the last page request.
9825func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
9826	return iter.page.Response()
9827}
9828
9829// Value returns the current value or a zero-initialized value if the
9830// iterator has advanced beyond the end of the collection.
9831func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
9832	if !iter.page.NotDone() {
9833		return EndpointServiceResult{}
9834	}
9835	return iter.page.Values()[iter.i]
9836}
9837
9838// Creates a new instance of the EndpointServicesListResultIterator type.
9839func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
9840	return EndpointServicesListResultIterator{page: page}
9841}
9842
9843// IsEmpty returns true if the ListResult contains no values.
9844func (eslr EndpointServicesListResult) IsEmpty() bool {
9845	return eslr.Value == nil || len(*eslr.Value) == 0
9846}
9847
9848// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
9849// It returns nil if no more results exist.
9850func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
9851	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
9852		return nil, nil
9853	}
9854	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9855		autorest.AsJSON(),
9856		autorest.AsGet(),
9857		autorest.WithBaseURL(to.String(eslr.NextLink)))
9858}
9859
9860// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
9861type EndpointServicesListResultPage struct {
9862	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
9863	eslr EndpointServicesListResult
9864}
9865
9866// NextWithContext advances to the next page of values.  If there was an error making
9867// the request the page does not advance and the error is returned.
9868func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
9869	if tracing.IsEnabled() {
9870		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
9871		defer func() {
9872			sc := -1
9873			if page.Response().Response.Response != nil {
9874				sc = page.Response().Response.Response.StatusCode
9875			}
9876			tracing.EndSpan(ctx, sc, err)
9877		}()
9878	}
9879	next, err := page.fn(ctx, page.eslr)
9880	if err != nil {
9881		return err
9882	}
9883	page.eslr = next
9884	return nil
9885}
9886
9887// Next advances to the next page of values.  If there was an error making
9888// the request the page does not advance and the error is returned.
9889// Deprecated: Use NextWithContext() instead.
9890func (page *EndpointServicesListResultPage) Next() error {
9891	return page.NextWithContext(context.Background())
9892}
9893
9894// NotDone returns true if the page enumeration should be started or is not yet complete.
9895func (page EndpointServicesListResultPage) NotDone() bool {
9896	return !page.eslr.IsEmpty()
9897}
9898
9899// Response returns the raw server response from the last page request.
9900func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
9901	return page.eslr
9902}
9903
9904// Values returns the slice of values for the current page or nil if there are no values.
9905func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
9906	if page.eslr.IsEmpty() {
9907		return nil
9908	}
9909	return *page.eslr.Value
9910}
9911
9912// Creates a new instance of the EndpointServicesListResultPage type.
9913func NewEndpointServicesListResultPage(getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
9914	return EndpointServicesListResultPage{fn: getNextPage}
9915}
9916
9917// Error common error representation.
9918type Error struct {
9919	// Code - Error code.
9920	Code *string `json:"code,omitempty"`
9921	// Message - Error message.
9922	Message *string `json:"message,omitempty"`
9923	// Target - Error target.
9924	Target *string `json:"target,omitempty"`
9925	// Details - Error details.
9926	Details *[]ErrorDetails `json:"details,omitempty"`
9927	// InnerError - Inner error message.
9928	InnerError *string `json:"innerError,omitempty"`
9929}
9930
9931// ErrorDetails common error details representation.
9932type ErrorDetails struct {
9933	// Code - Error code.
9934	Code *string `json:"code,omitempty"`
9935	// Target - Error target.
9936	Target *string `json:"target,omitempty"`
9937	// Message - Error message.
9938	Message *string `json:"message,omitempty"`
9939}
9940
9941// ErrorResponse the error object.
9942type ErrorResponse struct {
9943	// Error - The error details object.
9944	Error *ErrorDetails `json:"error,omitempty"`
9945}
9946
9947// EvaluatedNetworkSecurityGroup results of network security group evaluation.
9948type EvaluatedNetworkSecurityGroup struct {
9949	// NetworkSecurityGroupID - Network security group ID.
9950	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
9951	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
9952	AppliedTo *string `json:"appliedTo,omitempty"`
9953	// MatchedRule - Matched network security rule.
9954	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
9955	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
9956	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
9957}
9958
9959// ExpressRouteCircuit expressRouteCircuit resource.
9960type ExpressRouteCircuit struct {
9961	autorest.Response `json:"-"`
9962	// Sku - The SKU.
9963	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
9964	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
9965	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
9966	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
9967	Etag *string `json:"etag,omitempty"`
9968	// ID - Resource ID.
9969	ID *string `json:"id,omitempty"`
9970	// Name - READ-ONLY; Resource name.
9971	Name *string `json:"name,omitempty"`
9972	// Type - READ-ONLY; Resource type.
9973	Type *string `json:"type,omitempty"`
9974	// Location - Resource location.
9975	Location *string `json:"location,omitempty"`
9976	// Tags - Resource tags.
9977	Tags map[string]*string `json:"tags"`
9978}
9979
9980// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
9981func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
9982	objectMap := make(map[string]interface{})
9983	if erc.Sku != nil {
9984		objectMap["sku"] = erc.Sku
9985	}
9986	if erc.ExpressRouteCircuitPropertiesFormat != nil {
9987		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
9988	}
9989	if erc.ID != nil {
9990		objectMap["id"] = erc.ID
9991	}
9992	if erc.Location != nil {
9993		objectMap["location"] = erc.Location
9994	}
9995	if erc.Tags != nil {
9996		objectMap["tags"] = erc.Tags
9997	}
9998	return json.Marshal(objectMap)
9999}
10000
10001// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
10002func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
10003	var m map[string]*json.RawMessage
10004	err := json.Unmarshal(body, &m)
10005	if err != nil {
10006		return err
10007	}
10008	for k, v := range m {
10009		switch k {
10010		case "sku":
10011			if v != nil {
10012				var sku ExpressRouteCircuitSku
10013				err = json.Unmarshal(*v, &sku)
10014				if err != nil {
10015					return err
10016				}
10017				erc.Sku = &sku
10018			}
10019		case "properties":
10020			if v != nil {
10021				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
10022				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
10023				if err != nil {
10024					return err
10025				}
10026				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
10027			}
10028		case "etag":
10029			if v != nil {
10030				var etag string
10031				err = json.Unmarshal(*v, &etag)
10032				if err != nil {
10033					return err
10034				}
10035				erc.Etag = &etag
10036			}
10037		case "id":
10038			if v != nil {
10039				var ID string
10040				err = json.Unmarshal(*v, &ID)
10041				if err != nil {
10042					return err
10043				}
10044				erc.ID = &ID
10045			}
10046		case "name":
10047			if v != nil {
10048				var name string
10049				err = json.Unmarshal(*v, &name)
10050				if err != nil {
10051					return err
10052				}
10053				erc.Name = &name
10054			}
10055		case "type":
10056			if v != nil {
10057				var typeVar string
10058				err = json.Unmarshal(*v, &typeVar)
10059				if err != nil {
10060					return err
10061				}
10062				erc.Type = &typeVar
10063			}
10064		case "location":
10065			if v != nil {
10066				var location string
10067				err = json.Unmarshal(*v, &location)
10068				if err != nil {
10069					return err
10070				}
10071				erc.Location = &location
10072			}
10073		case "tags":
10074			if v != nil {
10075				var tags map[string]*string
10076				err = json.Unmarshal(*v, &tags)
10077				if err != nil {
10078					return err
10079				}
10080				erc.Tags = tags
10081			}
10082		}
10083	}
10084
10085	return nil
10086}
10087
10088// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
10089type ExpressRouteCircuitArpTable struct {
10090	// Age - Entry age in minutes.
10091	Age *int32 `json:"age,omitempty"`
10092	// Interface - Interface address.
10093	Interface *string `json:"interface,omitempty"`
10094	// IPAddress - The IP address.
10095	IPAddress *string `json:"ipAddress,omitempty"`
10096	// MacAddress - The MAC address.
10097	MacAddress *string `json:"macAddress,omitempty"`
10098}
10099
10100// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
10101type ExpressRouteCircuitAuthorization struct {
10102	autorest.Response `json:"-"`
10103	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
10104	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
10105	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10106	Name *string `json:"name,omitempty"`
10107	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10108	Etag *string `json:"etag,omitempty"`
10109	// Type - READ-ONLY; Type of the resource.
10110	Type *string `json:"type,omitempty"`
10111	// ID - Resource ID.
10112	ID *string `json:"id,omitempty"`
10113}
10114
10115// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
10116func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
10117	objectMap := make(map[string]interface{})
10118	if erca.AuthorizationPropertiesFormat != nil {
10119		objectMap["properties"] = erca.AuthorizationPropertiesFormat
10120	}
10121	if erca.Name != nil {
10122		objectMap["name"] = erca.Name
10123	}
10124	if erca.ID != nil {
10125		objectMap["id"] = erca.ID
10126	}
10127	return json.Marshal(objectMap)
10128}
10129
10130// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
10131func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
10132	var m map[string]*json.RawMessage
10133	err := json.Unmarshal(body, &m)
10134	if err != nil {
10135		return err
10136	}
10137	for k, v := range m {
10138		switch k {
10139		case "properties":
10140			if v != nil {
10141				var authorizationPropertiesFormat AuthorizationPropertiesFormat
10142				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
10143				if err != nil {
10144					return err
10145				}
10146				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
10147			}
10148		case "name":
10149			if v != nil {
10150				var name string
10151				err = json.Unmarshal(*v, &name)
10152				if err != nil {
10153					return err
10154				}
10155				erca.Name = &name
10156			}
10157		case "etag":
10158			if v != nil {
10159				var etag string
10160				err = json.Unmarshal(*v, &etag)
10161				if err != nil {
10162					return err
10163				}
10164				erca.Etag = &etag
10165			}
10166		case "type":
10167			if v != nil {
10168				var typeVar string
10169				err = json.Unmarshal(*v, &typeVar)
10170				if err != nil {
10171					return err
10172				}
10173				erca.Type = &typeVar
10174			}
10175		case "id":
10176			if v != nil {
10177				var ID string
10178				err = json.Unmarshal(*v, &ID)
10179				if err != nil {
10180					return err
10181				}
10182				erca.ID = &ID
10183			}
10184		}
10185	}
10186
10187	return nil
10188}
10189
10190// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10191// results of a long-running operation.
10192type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
10193	azure.Future
10194}
10195
10196// Result returns the result of the asynchronous operation.
10197// If the operation has not completed it will return an error.
10198func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
10199	var done bool
10200	done, err = future.DoneWithContext(context.Background(), client)
10201	if err != nil {
10202		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10203		return
10204	}
10205	if !done {
10206		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
10207		return
10208	}
10209	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10210	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
10211		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
10212		if err != nil {
10213			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
10214		}
10215	}
10216	return
10217}
10218
10219// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
10220// of a long-running operation.
10221type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
10222	azure.Future
10223}
10224
10225// Result returns the result of the asynchronous operation.
10226// If the operation has not completed it will return an error.
10227func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
10228	var done bool
10229	done, err = future.DoneWithContext(context.Background(), client)
10230	if err != nil {
10231		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
10232		return
10233	}
10234	if !done {
10235		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
10236		return
10237	}
10238	ar.Response = future.Response()
10239	return
10240}
10241
10242// ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
10243// resource.
10244type ExpressRouteCircuitConnection struct {
10245	autorest.Response `json:"-"`
10246	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
10247	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
10248	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10249	Name *string `json:"name,omitempty"`
10250	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10251	Etag *string `json:"etag,omitempty"`
10252	// Type - READ-ONLY; Type of the resource.
10253	Type *string `json:"type,omitempty"`
10254	// ID - Resource ID.
10255	ID *string `json:"id,omitempty"`
10256}
10257
10258// MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
10259func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
10260	objectMap := make(map[string]interface{})
10261	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
10262		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
10263	}
10264	if ercc.Name != nil {
10265		objectMap["name"] = ercc.Name
10266	}
10267	if ercc.ID != nil {
10268		objectMap["id"] = ercc.ID
10269	}
10270	return json.Marshal(objectMap)
10271}
10272
10273// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
10274func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
10275	var m map[string]*json.RawMessage
10276	err := json.Unmarshal(body, &m)
10277	if err != nil {
10278		return err
10279	}
10280	for k, v := range m {
10281		switch k {
10282		case "properties":
10283			if v != nil {
10284				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
10285				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
10286				if err != nil {
10287					return err
10288				}
10289				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
10290			}
10291		case "name":
10292			if v != nil {
10293				var name string
10294				err = json.Unmarshal(*v, &name)
10295				if err != nil {
10296					return err
10297				}
10298				ercc.Name = &name
10299			}
10300		case "etag":
10301			if v != nil {
10302				var etag string
10303				err = json.Unmarshal(*v, &etag)
10304				if err != nil {
10305					return err
10306				}
10307				ercc.Etag = &etag
10308			}
10309		case "type":
10310			if v != nil {
10311				var typeVar string
10312				err = json.Unmarshal(*v, &typeVar)
10313				if err != nil {
10314					return err
10315				}
10316				ercc.Type = &typeVar
10317			}
10318		case "id":
10319			if v != nil {
10320				var ID string
10321				err = json.Unmarshal(*v, &ID)
10322				if err != nil {
10323					return err
10324				}
10325				ercc.ID = &ID
10326			}
10327		}
10328	}
10329
10330	return nil
10331}
10332
10333// ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
10334// global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
10335type ExpressRouteCircuitConnectionListResult struct {
10336	autorest.Response `json:"-"`
10337	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
10338	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
10339	// NextLink - The URL to get the next set of results.
10340	NextLink *string `json:"nextLink,omitempty"`
10341}
10342
10343// ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
10344// ExpressRouteCircuitConnection values.
10345type ExpressRouteCircuitConnectionListResultIterator struct {
10346	i    int
10347	page ExpressRouteCircuitConnectionListResultPage
10348}
10349
10350// NextWithContext advances to the next value.  If there was an error making
10351// the request the iterator does not advance and the error is returned.
10352func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
10353	if tracing.IsEnabled() {
10354		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
10355		defer func() {
10356			sc := -1
10357			if iter.Response().Response.Response != nil {
10358				sc = iter.Response().Response.Response.StatusCode
10359			}
10360			tracing.EndSpan(ctx, sc, err)
10361		}()
10362	}
10363	iter.i++
10364	if iter.i < len(iter.page.Values()) {
10365		return nil
10366	}
10367	err = iter.page.NextWithContext(ctx)
10368	if err != nil {
10369		iter.i--
10370		return err
10371	}
10372	iter.i = 0
10373	return nil
10374}
10375
10376// Next advances to the next value.  If there was an error making
10377// the request the iterator does not advance and the error is returned.
10378// Deprecated: Use NextWithContext() instead.
10379func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
10380	return iter.NextWithContext(context.Background())
10381}
10382
10383// NotDone returns true if the enumeration should be started or is not yet complete.
10384func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
10385	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10386}
10387
10388// Response returns the raw server response from the last page request.
10389func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
10390	return iter.page.Response()
10391}
10392
10393// Value returns the current value or a zero-initialized value if the
10394// iterator has advanced beyond the end of the collection.
10395func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
10396	if !iter.page.NotDone() {
10397		return ExpressRouteCircuitConnection{}
10398	}
10399	return iter.page.Values()[iter.i]
10400}
10401
10402// Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
10403func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
10404	return ExpressRouteCircuitConnectionListResultIterator{page: page}
10405}
10406
10407// IsEmpty returns true if the ListResult contains no values.
10408func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
10409	return ercclr.Value == nil || len(*ercclr.Value) == 0
10410}
10411
10412// expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
10413// It returns nil if no more results exist.
10414func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
10415	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
10416		return nil, nil
10417	}
10418	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10419		autorest.AsJSON(),
10420		autorest.AsGet(),
10421		autorest.WithBaseURL(to.String(ercclr.NextLink)))
10422}
10423
10424// ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
10425type ExpressRouteCircuitConnectionListResultPage struct {
10426	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
10427	ercclr ExpressRouteCircuitConnectionListResult
10428}
10429
10430// NextWithContext advances to the next page of values.  If there was an error making
10431// the request the page does not advance and the error is returned.
10432func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
10433	if tracing.IsEnabled() {
10434		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
10435		defer func() {
10436			sc := -1
10437			if page.Response().Response.Response != nil {
10438				sc = page.Response().Response.Response.StatusCode
10439			}
10440			tracing.EndSpan(ctx, sc, err)
10441		}()
10442	}
10443	next, err := page.fn(ctx, page.ercclr)
10444	if err != nil {
10445		return err
10446	}
10447	page.ercclr = next
10448	return nil
10449}
10450
10451// Next advances to the next page of values.  If there was an error making
10452// the request the page does not advance and the error is returned.
10453// Deprecated: Use NextWithContext() instead.
10454func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
10455	return page.NextWithContext(context.Background())
10456}
10457
10458// NotDone returns true if the page enumeration should be started or is not yet complete.
10459func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
10460	return !page.ercclr.IsEmpty()
10461}
10462
10463// Response returns the raw server response from the last page request.
10464func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
10465	return page.ercclr
10466}
10467
10468// Values returns the slice of values for the current page or nil if there are no values.
10469func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
10470	if page.ercclr.IsEmpty() {
10471		return nil
10472	}
10473	return *page.ercclr.Value
10474}
10475
10476// Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
10477func NewExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
10478	return ExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
10479}
10480
10481// ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
10482type ExpressRouteCircuitConnectionPropertiesFormat struct {
10483	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
10484	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
10485	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
10486	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
10487	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
10488	AddressPrefix *string `json:"addressPrefix,omitempty"`
10489	// AuthorizationKey - The authorization key.
10490	AuthorizationKey *string `json:"authorizationKey,omitempty"`
10491	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
10492	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
10493	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10494	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10495}
10496
10497// ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
10498// results of a long-running operation.
10499type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
10500	azure.Future
10501}
10502
10503// Result returns the result of the asynchronous operation.
10504// If the operation has not completed it will return an error.
10505func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
10506	var done bool
10507	done, err = future.DoneWithContext(context.Background(), client)
10508	if err != nil {
10509		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10510		return
10511	}
10512	if !done {
10513		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
10514		return
10515	}
10516	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10517	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
10518		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
10519		if err != nil {
10520			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
10521		}
10522	}
10523	return
10524}
10525
10526// ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
10527// long-running operation.
10528type ExpressRouteCircuitConnectionsDeleteFuture struct {
10529	azure.Future
10530}
10531
10532// Result returns the result of the asynchronous operation.
10533// If the operation has not completed it will return an error.
10534func (future *ExpressRouteCircuitConnectionsDeleteFuture) Result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
10535	var done bool
10536	done, err = future.DoneWithContext(context.Background(), client)
10537	if err != nil {
10538		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
10539		return
10540	}
10541	if !done {
10542		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
10543		return
10544	}
10545	ar.Response = future.Response()
10546	return
10547}
10548
10549// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
10550type ExpressRouteCircuitListResult struct {
10551	autorest.Response `json:"-"`
10552	// Value - A list of ExpressRouteCircuits in a resource group.
10553	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
10554	// NextLink - The URL to get the next set of results.
10555	NextLink *string `json:"nextLink,omitempty"`
10556}
10557
10558// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
10559// values.
10560type ExpressRouteCircuitListResultIterator struct {
10561	i    int
10562	page ExpressRouteCircuitListResultPage
10563}
10564
10565// NextWithContext advances to the next value.  If there was an error making
10566// the request the iterator does not advance and the error is returned.
10567func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
10568	if tracing.IsEnabled() {
10569		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
10570		defer func() {
10571			sc := -1
10572			if iter.Response().Response.Response != nil {
10573				sc = iter.Response().Response.Response.StatusCode
10574			}
10575			tracing.EndSpan(ctx, sc, err)
10576		}()
10577	}
10578	iter.i++
10579	if iter.i < len(iter.page.Values()) {
10580		return nil
10581	}
10582	err = iter.page.NextWithContext(ctx)
10583	if err != nil {
10584		iter.i--
10585		return err
10586	}
10587	iter.i = 0
10588	return nil
10589}
10590
10591// Next advances to the next value.  If there was an error making
10592// the request the iterator does not advance and the error is returned.
10593// Deprecated: Use NextWithContext() instead.
10594func (iter *ExpressRouteCircuitListResultIterator) Next() error {
10595	return iter.NextWithContext(context.Background())
10596}
10597
10598// NotDone returns true if the enumeration should be started or is not yet complete.
10599func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
10600	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10601}
10602
10603// Response returns the raw server response from the last page request.
10604func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
10605	return iter.page.Response()
10606}
10607
10608// Value returns the current value or a zero-initialized value if the
10609// iterator has advanced beyond the end of the collection.
10610func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
10611	if !iter.page.NotDone() {
10612		return ExpressRouteCircuit{}
10613	}
10614	return iter.page.Values()[iter.i]
10615}
10616
10617// Creates a new instance of the ExpressRouteCircuitListResultIterator type.
10618func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
10619	return ExpressRouteCircuitListResultIterator{page: page}
10620}
10621
10622// IsEmpty returns true if the ListResult contains no values.
10623func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
10624	return erclr.Value == nil || len(*erclr.Value) == 0
10625}
10626
10627// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
10628// It returns nil if no more results exist.
10629func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
10630	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
10631		return nil, nil
10632	}
10633	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10634		autorest.AsJSON(),
10635		autorest.AsGet(),
10636		autorest.WithBaseURL(to.String(erclr.NextLink)))
10637}
10638
10639// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
10640type ExpressRouteCircuitListResultPage struct {
10641	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
10642	erclr ExpressRouteCircuitListResult
10643}
10644
10645// NextWithContext advances to the next page of values.  If there was an error making
10646// the request the page does not advance and the error is returned.
10647func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
10648	if tracing.IsEnabled() {
10649		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
10650		defer func() {
10651			sc := -1
10652			if page.Response().Response.Response != nil {
10653				sc = page.Response().Response.Response.StatusCode
10654			}
10655			tracing.EndSpan(ctx, sc, err)
10656		}()
10657	}
10658	next, err := page.fn(ctx, page.erclr)
10659	if err != nil {
10660		return err
10661	}
10662	page.erclr = next
10663	return nil
10664}
10665
10666// Next advances to the next page of values.  If there was an error making
10667// the request the page does not advance and the error is returned.
10668// Deprecated: Use NextWithContext() instead.
10669func (page *ExpressRouteCircuitListResultPage) Next() error {
10670	return page.NextWithContext(context.Background())
10671}
10672
10673// NotDone returns true if the page enumeration should be started or is not yet complete.
10674func (page ExpressRouteCircuitListResultPage) NotDone() bool {
10675	return !page.erclr.IsEmpty()
10676}
10677
10678// Response returns the raw server response from the last page request.
10679func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
10680	return page.erclr
10681}
10682
10683// Values returns the slice of values for the current page or nil if there are no values.
10684func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
10685	if page.erclr.IsEmpty() {
10686		return nil
10687	}
10688	return *page.erclr.Value
10689}
10690
10691// Creates a new instance of the ExpressRouteCircuitListResultPage type.
10692func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
10693	return ExpressRouteCircuitListResultPage{fn: getNextPage}
10694}
10695
10696// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
10697type ExpressRouteCircuitPeering struct {
10698	autorest.Response `json:"-"`
10699	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
10700	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
10701	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10702	Name *string `json:"name,omitempty"`
10703	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
10704	Etag *string `json:"etag,omitempty"`
10705	// Type - READ-ONLY; Type of the resource.
10706	Type *string `json:"type,omitempty"`
10707	// ID - Resource ID.
10708	ID *string `json:"id,omitempty"`
10709}
10710
10711// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
10712func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
10713	objectMap := make(map[string]interface{})
10714	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
10715		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
10716	}
10717	if ercp.Name != nil {
10718		objectMap["name"] = ercp.Name
10719	}
10720	if ercp.ID != nil {
10721		objectMap["id"] = ercp.ID
10722	}
10723	return json.Marshal(objectMap)
10724}
10725
10726// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
10727func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
10728	var m map[string]*json.RawMessage
10729	err := json.Unmarshal(body, &m)
10730	if err != nil {
10731		return err
10732	}
10733	for k, v := range m {
10734		switch k {
10735		case "properties":
10736			if v != nil {
10737				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
10738				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
10739				if err != nil {
10740					return err
10741				}
10742				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
10743			}
10744		case "name":
10745			if v != nil {
10746				var name string
10747				err = json.Unmarshal(*v, &name)
10748				if err != nil {
10749					return err
10750				}
10751				ercp.Name = &name
10752			}
10753		case "etag":
10754			if v != nil {
10755				var etag string
10756				err = json.Unmarshal(*v, &etag)
10757				if err != nil {
10758					return err
10759				}
10760				ercp.Etag = &etag
10761			}
10762		case "type":
10763			if v != nil {
10764				var typeVar string
10765				err = json.Unmarshal(*v, &typeVar)
10766				if err != nil {
10767					return err
10768				}
10769				ercp.Type = &typeVar
10770			}
10771		case "id":
10772			if v != nil {
10773				var ID string
10774				err = json.Unmarshal(*v, &ID)
10775				if err != nil {
10776					return err
10777				}
10778				ercp.ID = &ID
10779			}
10780		}
10781	}
10782
10783	return nil
10784}
10785
10786// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
10787type ExpressRouteCircuitPeeringConfig struct {
10788	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
10789	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
10790	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering.
10791	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
10792	// AdvertisedPublicPrefixesState - The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
10793	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
10794	// LegacyMode - The legacy mode of the peering.
10795	LegacyMode *int32 `json:"legacyMode,omitempty"`
10796	// CustomerASN - The CustomerASN of the peering.
10797	CustomerASN *int32 `json:"customerASN,omitempty"`
10798	// RoutingRegistryName - The RoutingRegistryName of the configuration.
10799	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
10800}
10801
10802// ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
10803type ExpressRouteCircuitPeeringID struct {
10804	// ID - The ID of the ExpressRoute circuit peering.
10805	ID *string `json:"id,omitempty"`
10806}
10807
10808// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
10809// that belong to an ExpressRouteCircuit.
10810type ExpressRouteCircuitPeeringListResult struct {
10811	autorest.Response `json:"-"`
10812	// Value - The peerings in an express route circuit.
10813	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
10814	// NextLink - The URL to get the next set of results.
10815	NextLink *string `json:"nextLink,omitempty"`
10816}
10817
10818// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
10819// ExpressRouteCircuitPeering values.
10820type ExpressRouteCircuitPeeringListResultIterator struct {
10821	i    int
10822	page ExpressRouteCircuitPeeringListResultPage
10823}
10824
10825// NextWithContext advances to the next value.  If there was an error making
10826// the request the iterator does not advance and the error is returned.
10827func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
10828	if tracing.IsEnabled() {
10829		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
10830		defer func() {
10831			sc := -1
10832			if iter.Response().Response.Response != nil {
10833				sc = iter.Response().Response.Response.StatusCode
10834			}
10835			tracing.EndSpan(ctx, sc, err)
10836		}()
10837	}
10838	iter.i++
10839	if iter.i < len(iter.page.Values()) {
10840		return nil
10841	}
10842	err = iter.page.NextWithContext(ctx)
10843	if err != nil {
10844		iter.i--
10845		return err
10846	}
10847	iter.i = 0
10848	return nil
10849}
10850
10851// Next advances to the next value.  If there was an error making
10852// the request the iterator does not advance and the error is returned.
10853// Deprecated: Use NextWithContext() instead.
10854func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
10855	return iter.NextWithContext(context.Background())
10856}
10857
10858// NotDone returns true if the enumeration should be started or is not yet complete.
10859func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
10860	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10861}
10862
10863// Response returns the raw server response from the last page request.
10864func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
10865	return iter.page.Response()
10866}
10867
10868// Value returns the current value or a zero-initialized value if the
10869// iterator has advanced beyond the end of the collection.
10870func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
10871	if !iter.page.NotDone() {
10872		return ExpressRouteCircuitPeering{}
10873	}
10874	return iter.page.Values()[iter.i]
10875}
10876
10877// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
10878func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
10879	return ExpressRouteCircuitPeeringListResultIterator{page: page}
10880}
10881
10882// IsEmpty returns true if the ListResult contains no values.
10883func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
10884	return ercplr.Value == nil || len(*ercplr.Value) == 0
10885}
10886
10887// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
10888// It returns nil if no more results exist.
10889func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
10890	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
10891		return nil, nil
10892	}
10893	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10894		autorest.AsJSON(),
10895		autorest.AsGet(),
10896		autorest.WithBaseURL(to.String(ercplr.NextLink)))
10897}
10898
10899// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
10900type ExpressRouteCircuitPeeringListResultPage struct {
10901	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
10902	ercplr ExpressRouteCircuitPeeringListResult
10903}
10904
10905// NextWithContext advances to the next page of values.  If there was an error making
10906// the request the page does not advance and the error is returned.
10907func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
10908	if tracing.IsEnabled() {
10909		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
10910		defer func() {
10911			sc := -1
10912			if page.Response().Response.Response != nil {
10913				sc = page.Response().Response.Response.StatusCode
10914			}
10915			tracing.EndSpan(ctx, sc, err)
10916		}()
10917	}
10918	next, err := page.fn(ctx, page.ercplr)
10919	if err != nil {
10920		return err
10921	}
10922	page.ercplr = next
10923	return nil
10924}
10925
10926// Next advances to the next page of values.  If there was an error making
10927// the request the page does not advance and the error is returned.
10928// Deprecated: Use NextWithContext() instead.
10929func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
10930	return page.NextWithContext(context.Background())
10931}
10932
10933// NotDone returns true if the page enumeration should be started or is not yet complete.
10934func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
10935	return !page.ercplr.IsEmpty()
10936}
10937
10938// Response returns the raw server response from the last page request.
10939func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
10940	return page.ercplr
10941}
10942
10943// Values returns the slice of values for the current page or nil if there are no values.
10944func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
10945	if page.ercplr.IsEmpty() {
10946		return nil
10947	}
10948	return *page.ercplr.Value
10949}
10950
10951// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
10952func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
10953	return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage}
10954}
10955
10956// ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
10957type ExpressRouteCircuitPeeringPropertiesFormat struct {
10958	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
10959	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
10960	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
10961	State ExpressRoutePeeringState `json:"state,omitempty"`
10962	// AzureASN - The Azure ASN.
10963	AzureASN *int32 `json:"azureASN,omitempty"`
10964	// PeerASN - The peer ASN.
10965	PeerASN *int64 `json:"peerASN,omitempty"`
10966	// PrimaryPeerAddressPrefix - The primary address prefix.
10967	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
10968	// SecondaryPeerAddressPrefix - The secondary address prefix.
10969	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
10970	// PrimaryAzurePort - The primary port.
10971	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
10972	// SecondaryAzurePort - The secondary port.
10973	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
10974	// SharedKey - The shared key.
10975	SharedKey *string `json:"sharedKey,omitempty"`
10976	// VlanID - The VLAN ID.
10977	VlanID *int32 `json:"vlanId,omitempty"`
10978	// MicrosoftPeeringConfig - The Microsoft peering configuration.
10979	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
10980	// Stats - The peering stats of express route circuit.
10981	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
10982	// ProvisioningState - The provisioning state of the express route circuit peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
10983	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
10984	// GatewayManagerEtag - The GatewayManager Etag.
10985	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
10986	// LastModifiedBy - Who was the last to modify the peering.
10987	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
10988	// RouteFilter - The reference of the RouteFilter resource.
10989	RouteFilter *SubResource `json:"routeFilter,omitempty"`
10990	// Ipv6PeeringConfig - The IPv6 peering configuration.
10991	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
10992	// ExpressRouteConnection - The ExpressRoute connection.
10993	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
10994	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
10995	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
10996	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
10997	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
10998}
10999
11000// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
11001// of a long-running operation.
11002type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
11003	azure.Future
11004}
11005
11006// Result returns the result of the asynchronous operation.
11007// If the operation has not completed it will return an error.
11008func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
11009	var done bool
11010	done, err = future.DoneWithContext(context.Background(), client)
11011	if err != nil {
11012		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11013		return
11014	}
11015	if !done {
11016		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
11017		return
11018	}
11019	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11020	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
11021		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
11022		if err != nil {
11023			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
11024		}
11025	}
11026	return
11027}
11028
11029// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
11030// long-running operation.
11031type ExpressRouteCircuitPeeringsDeleteFuture struct {
11032	azure.Future
11033}
11034
11035// Result returns the result of the asynchronous operation.
11036// If the operation has not completed it will return an error.
11037func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
11038	var done bool
11039	done, err = future.DoneWithContext(context.Background(), client)
11040	if err != nil {
11041		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
11042		return
11043	}
11044	if !done {
11045		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
11046		return
11047	}
11048	ar.Response = future.Response()
11049	return
11050}
11051
11052// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
11053type ExpressRouteCircuitPropertiesFormat struct {
11054	// AllowClassicOperations - Allow classic operations.
11055	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
11056	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
11057	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
11058	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
11059	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
11060	// Authorizations - The list of authorizations.
11061	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
11062	// Peerings - The list of peerings.
11063	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
11064	// ServiceKey - The ServiceKey.
11065	ServiceKey *string `json:"serviceKey,omitempty"`
11066	// ServiceProviderNotes - The ServiceProviderNotes.
11067	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
11068	// ServiceProviderProperties - The ServiceProviderProperties.
11069	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
11070	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
11071	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
11072	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
11073	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
11074	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
11075	Stag *int32 `json:"stag,omitempty"`
11076	// ProvisioningState - The provisioning state of the express route circuit resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11077	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11078	// GatewayManagerEtag - The GatewayManager Etag.
11079	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
11080	// GlobalReachEnabled - Flag denoting Global reach status.
11081	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
11082}
11083
11084// ExpressRouteCircuitReference reference to an express route circuit.
11085type ExpressRouteCircuitReference struct {
11086	// ID - Corresponding Express Route Circuit Id.
11087	ID *string `json:"id,omitempty"`
11088}
11089
11090// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit.
11091type ExpressRouteCircuitRoutesTable struct {
11092	// NetworkProperty - IP address of a network entity.
11093	NetworkProperty *string `json:"network,omitempty"`
11094	// NextHop - NextHop address.
11095	NextHop *string `json:"nextHop,omitempty"`
11096	// LocPrf - Local preference value as set with the set local-preference route-map configuration command.
11097	LocPrf *string `json:"locPrf,omitempty"`
11098	// Weight - Route Weight.
11099	Weight *int32 `json:"weight,omitempty"`
11100	// Path - Autonomous system paths to the destination network.
11101	Path *string `json:"path,omitempty"`
11102}
11103
11104// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
11105type ExpressRouteCircuitRoutesTableSummary struct {
11106	// Neighbor - IP address of the neighbor.
11107	Neighbor *string `json:"neighbor,omitempty"`
11108	// V - BGP version number spoken to the neighbor.
11109	V *int32 `json:"v,omitempty"`
11110	// As - Autonomous system number.
11111	As *int32 `json:"as,omitempty"`
11112	// 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.
11113	UpDown *string `json:"upDown,omitempty"`
11114	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
11115	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
11116}
11117
11118// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
11119// Circuits API.
11120type ExpressRouteCircuitsArpTableListResult struct {
11121	autorest.Response `json:"-"`
11122	// Value - A list of the ARP tables.
11123	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
11124	// NextLink - The URL to get the next set of results.
11125	NextLink *string `json:"nextLink,omitempty"`
11126}
11127
11128// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
11129// long-running operation.
11130type ExpressRouteCircuitsCreateOrUpdateFuture struct {
11131	azure.Future
11132}
11133
11134// Result returns the result of the asynchronous operation.
11135// If the operation has not completed it will return an error.
11136func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
11137	var done bool
11138	done, err = future.DoneWithContext(context.Background(), client)
11139	if err != nil {
11140		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11141		return
11142	}
11143	if !done {
11144		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
11145		return
11146	}
11147	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11148	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11149		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
11150		if err != nil {
11151			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
11152		}
11153	}
11154	return
11155}
11156
11157// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
11158// long-running operation.
11159type ExpressRouteCircuitsDeleteFuture struct {
11160	azure.Future
11161}
11162
11163// Result returns the result of the asynchronous operation.
11164// If the operation has not completed it will return an error.
11165func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
11166	var done bool
11167	done, err = future.DoneWithContext(context.Background(), client)
11168	if err != nil {
11169		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
11170		return
11171	}
11172	if !done {
11173		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
11174		return
11175	}
11176	ar.Response = future.Response()
11177	return
11178}
11179
11180// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
11181// ExpressRouteCircuit.
11182type ExpressRouteCircuitServiceProviderProperties struct {
11183	// ServiceProviderName - The serviceProviderName.
11184	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
11185	// PeeringLocation - The peering location.
11186	PeeringLocation *string `json:"peeringLocation,omitempty"`
11187	// BandwidthInMbps - The BandwidthInMbps.
11188	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
11189}
11190
11191// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
11192type ExpressRouteCircuitSku struct {
11193	// Name - The name of the SKU.
11194	Name *string `json:"name,omitempty"`
11195	// Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
11196	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
11197	// Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData'
11198	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
11199}
11200
11201// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
11202// long-running operation.
11203type ExpressRouteCircuitsListArpTableFuture struct {
11204	azure.Future
11205}
11206
11207// Result returns the result of the asynchronous operation.
11208// If the operation has not completed it will return an error.
11209func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
11210	var done bool
11211	done, err = future.DoneWithContext(context.Background(), client)
11212	if err != nil {
11213		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
11214		return
11215	}
11216	if !done {
11217		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
11218		return
11219	}
11220	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11221	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
11222		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
11223		if err != nil {
11224			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
11225		}
11226	}
11227	return
11228}
11229
11230// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
11231// long-running operation.
11232type ExpressRouteCircuitsListRoutesTableFuture struct {
11233	azure.Future
11234}
11235
11236// Result returns the result of the asynchronous operation.
11237// If the operation has not completed it will return an error.
11238func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
11239	var done bool
11240	done, err = future.DoneWithContext(context.Background(), client)
11241	if err != nil {
11242		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
11243		return
11244	}
11245	if !done {
11246		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
11247		return
11248	}
11249	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11250	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
11251		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
11252		if err != nil {
11253			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
11254		}
11255	}
11256	return
11257}
11258
11259// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
11260// results of a long-running operation.
11261type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
11262	azure.Future
11263}
11264
11265// Result returns the result of the asynchronous operation.
11266// If the operation has not completed it will return an error.
11267func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
11268	var done bool
11269	done, err = future.DoneWithContext(context.Background(), client)
11270	if err != nil {
11271		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
11272		return
11273	}
11274	if !done {
11275		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
11276		return
11277	}
11278	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11279	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
11280		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
11281		if err != nil {
11282			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
11283		}
11284	}
11285	return
11286}
11287
11288// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
11289// Circuits API.
11290type ExpressRouteCircuitsRoutesTableListResult struct {
11291	autorest.Response `json:"-"`
11292	// Value - The list of routes table.
11293	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
11294	// NextLink - The URL to get the next set of results.
11295	NextLink *string `json:"nextLink,omitempty"`
11296}
11297
11298// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
11299// Express Route Circuits API.
11300type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
11301	autorest.Response `json:"-"`
11302	// Value - A list of the routes table.
11303	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
11304	// NextLink - The URL to get the next set of results.
11305	NextLink *string `json:"nextLink,omitempty"`
11306}
11307
11308// ExpressRouteCircuitStats contains stats associated with the peering.
11309type ExpressRouteCircuitStats struct {
11310	autorest.Response `json:"-"`
11311	// PrimarybytesIn - The Primary BytesIn of the peering.
11312	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
11313	// PrimarybytesOut - The primary BytesOut of the peering.
11314	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
11315	// SecondarybytesIn - The secondary BytesIn of the peering.
11316	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
11317	// SecondarybytesOut - The secondary BytesOut of the peering.
11318	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
11319}
11320
11321// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
11322// long-running operation.
11323type ExpressRouteCircuitsUpdateTagsFuture struct {
11324	azure.Future
11325}
11326
11327// Result returns the result of the asynchronous operation.
11328// If the operation has not completed it will return an error.
11329func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
11330	var done bool
11331	done, err = future.DoneWithContext(context.Background(), client)
11332	if err != nil {
11333		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11334		return
11335	}
11336	if !done {
11337		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
11338		return
11339	}
11340	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11341	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11342		erc, err = client.UpdateTagsResponder(erc.Response.Response)
11343		if err != nil {
11344			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
11345		}
11346	}
11347	return
11348}
11349
11350// ExpressRouteConnection expressRouteConnection resource.
11351type ExpressRouteConnection struct {
11352	autorest.Response `json:"-"`
11353	// ExpressRouteConnectionProperties - Properties of the express route connection.
11354	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
11355	// Name - The name of the resource.
11356	Name *string `json:"name,omitempty"`
11357	// ID - Resource ID.
11358	ID *string `json:"id,omitempty"`
11359}
11360
11361// MarshalJSON is the custom marshaler for ExpressRouteConnection.
11362func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
11363	objectMap := make(map[string]interface{})
11364	if erc.ExpressRouteConnectionProperties != nil {
11365		objectMap["properties"] = erc.ExpressRouteConnectionProperties
11366	}
11367	if erc.Name != nil {
11368		objectMap["name"] = erc.Name
11369	}
11370	if erc.ID != nil {
11371		objectMap["id"] = erc.ID
11372	}
11373	return json.Marshal(objectMap)
11374}
11375
11376// UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
11377func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
11378	var m map[string]*json.RawMessage
11379	err := json.Unmarshal(body, &m)
11380	if err != nil {
11381		return err
11382	}
11383	for k, v := range m {
11384		switch k {
11385		case "properties":
11386			if v != nil {
11387				var expressRouteConnectionProperties ExpressRouteConnectionProperties
11388				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
11389				if err != nil {
11390					return err
11391				}
11392				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
11393			}
11394		case "name":
11395			if v != nil {
11396				var name string
11397				err = json.Unmarshal(*v, &name)
11398				if err != nil {
11399					return err
11400				}
11401				erc.Name = &name
11402			}
11403		case "id":
11404			if v != nil {
11405				var ID string
11406				err = json.Unmarshal(*v, &ID)
11407				if err != nil {
11408					return err
11409				}
11410				erc.ID = &ID
11411			}
11412		}
11413	}
11414
11415	return nil
11416}
11417
11418// ExpressRouteConnectionID the ID of the ExpressRouteConnection.
11419type ExpressRouteConnectionID struct {
11420	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
11421	ID *string `json:"id,omitempty"`
11422}
11423
11424// ExpressRouteConnectionList expressRouteConnection list.
11425type ExpressRouteConnectionList struct {
11426	autorest.Response `json:"-"`
11427	// Value - The list of ExpressRoute connections.
11428	Value *[]ExpressRouteConnection `json:"value,omitempty"`
11429}
11430
11431// ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
11432type ExpressRouteConnectionProperties struct {
11433	// ProvisioningState - The provisioning state of the express route connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
11434	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
11435	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
11436	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
11437	// AuthorizationKey - Authorization key to establish the connection.
11438	AuthorizationKey *string `json:"authorizationKey,omitempty"`
11439	// RoutingWeight - The routing weight associated to the connection.
11440	RoutingWeight *int32 `json:"routingWeight,omitempty"`
11441}
11442
11443// ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
11444// a long-running operation.
11445type ExpressRouteConnectionsCreateOrUpdateFuture struct {
11446	azure.Future
11447}
11448
11449// Result returns the result of the asynchronous operation.
11450// If the operation has not completed it will return an error.
11451func (future *ExpressRouteConnectionsCreateOrUpdateFuture) Result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
11452	var done bool
11453	done, err = future.DoneWithContext(context.Background(), client)
11454	if err != nil {
11455		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11456		return
11457	}
11458	if !done {
11459		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
11460		return
11461	}
11462	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11463	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
11464		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
11465		if err != nil {
11466			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
11467		}
11468	}
11469	return
11470}
11471
11472// ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
11473// long-running operation.
11474type ExpressRouteConnectionsDeleteFuture struct {
11475	azure.Future
11476}
11477
11478// Result returns the result of the asynchronous operation.
11479// If the operation has not completed it will return an error.
11480func (future *ExpressRouteConnectionsDeleteFuture) Result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
11481	var done bool
11482	done, err = future.DoneWithContext(context.Background(), client)
11483	if err != nil {
11484		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
11485		return
11486	}
11487	if !done {
11488		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
11489		return
11490	}
11491	ar.Response = future.Response()
11492	return
11493}
11494
11495// ExpressRouteCrossConnection expressRouteCrossConnection resource.
11496type ExpressRouteCrossConnection struct {
11497	autorest.Response `json:"-"`
11498	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
11499	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
11500	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11501	Etag *string `json:"etag,omitempty"`
11502	// ID - Resource ID.
11503	ID *string `json:"id,omitempty"`
11504	// Name - READ-ONLY; Resource name.
11505	Name *string `json:"name,omitempty"`
11506	// Type - READ-ONLY; Resource type.
11507	Type *string `json:"type,omitempty"`
11508	// Location - Resource location.
11509	Location *string `json:"location,omitempty"`
11510	// Tags - Resource tags.
11511	Tags map[string]*string `json:"tags"`
11512}
11513
11514// MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
11515func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
11516	objectMap := make(map[string]interface{})
11517	if ercc.ExpressRouteCrossConnectionProperties != nil {
11518		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
11519	}
11520	if ercc.ID != nil {
11521		objectMap["id"] = ercc.ID
11522	}
11523	if ercc.Location != nil {
11524		objectMap["location"] = ercc.Location
11525	}
11526	if ercc.Tags != nil {
11527		objectMap["tags"] = ercc.Tags
11528	}
11529	return json.Marshal(objectMap)
11530}
11531
11532// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
11533func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
11534	var m map[string]*json.RawMessage
11535	err := json.Unmarshal(body, &m)
11536	if err != nil {
11537		return err
11538	}
11539	for k, v := range m {
11540		switch k {
11541		case "properties":
11542			if v != nil {
11543				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
11544				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
11545				if err != nil {
11546					return err
11547				}
11548				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
11549			}
11550		case "etag":
11551			if v != nil {
11552				var etag string
11553				err = json.Unmarshal(*v, &etag)
11554				if err != nil {
11555					return err
11556				}
11557				ercc.Etag = &etag
11558			}
11559		case "id":
11560			if v != nil {
11561				var ID string
11562				err = json.Unmarshal(*v, &ID)
11563				if err != nil {
11564					return err
11565				}
11566				ercc.ID = &ID
11567			}
11568		case "name":
11569			if v != nil {
11570				var name string
11571				err = json.Unmarshal(*v, &name)
11572				if err != nil {
11573					return err
11574				}
11575				ercc.Name = &name
11576			}
11577		case "type":
11578			if v != nil {
11579				var typeVar string
11580				err = json.Unmarshal(*v, &typeVar)
11581				if err != nil {
11582					return err
11583				}
11584				ercc.Type = &typeVar
11585			}
11586		case "location":
11587			if v != nil {
11588				var location string
11589				err = json.Unmarshal(*v, &location)
11590				if err != nil {
11591					return err
11592				}
11593				ercc.Location = &location
11594			}
11595		case "tags":
11596			if v != nil {
11597				var tags map[string]*string
11598				err = json.Unmarshal(*v, &tags)
11599				if err != nil {
11600					return err
11601				}
11602				ercc.Tags = tags
11603			}
11604		}
11605	}
11606
11607	return nil
11608}
11609
11610// ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
11611type ExpressRouteCrossConnectionListResult struct {
11612	autorest.Response `json:"-"`
11613	// Value - A list of ExpressRouteCrossConnection resources.
11614	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
11615	// NextLink - READ-ONLY; The URL to get the next set of results.
11616	NextLink *string `json:"nextLink,omitempty"`
11617}
11618
11619// ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
11620// ExpressRouteCrossConnection values.
11621type ExpressRouteCrossConnectionListResultIterator struct {
11622	i    int
11623	page ExpressRouteCrossConnectionListResultPage
11624}
11625
11626// NextWithContext advances to the next value.  If there was an error making
11627// the request the iterator does not advance and the error is returned.
11628func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
11629	if tracing.IsEnabled() {
11630		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
11631		defer func() {
11632			sc := -1
11633			if iter.Response().Response.Response != nil {
11634				sc = iter.Response().Response.Response.StatusCode
11635			}
11636			tracing.EndSpan(ctx, sc, err)
11637		}()
11638	}
11639	iter.i++
11640	if iter.i < len(iter.page.Values()) {
11641		return nil
11642	}
11643	err = iter.page.NextWithContext(ctx)
11644	if err != nil {
11645		iter.i--
11646		return err
11647	}
11648	iter.i = 0
11649	return nil
11650}
11651
11652// Next advances to the next value.  If there was an error making
11653// the request the iterator does not advance and the error is returned.
11654// Deprecated: Use NextWithContext() instead.
11655func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
11656	return iter.NextWithContext(context.Background())
11657}
11658
11659// NotDone returns true if the enumeration should be started or is not yet complete.
11660func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
11661	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11662}
11663
11664// Response returns the raw server response from the last page request.
11665func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
11666	return iter.page.Response()
11667}
11668
11669// Value returns the current value or a zero-initialized value if the
11670// iterator has advanced beyond the end of the collection.
11671func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
11672	if !iter.page.NotDone() {
11673		return ExpressRouteCrossConnection{}
11674	}
11675	return iter.page.Values()[iter.i]
11676}
11677
11678// Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
11679func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
11680	return ExpressRouteCrossConnectionListResultIterator{page: page}
11681}
11682
11683// IsEmpty returns true if the ListResult contains no values.
11684func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
11685	return ercclr.Value == nil || len(*ercclr.Value) == 0
11686}
11687
11688// expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
11689// It returns nil if no more results exist.
11690func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
11691	if ercclr.NextLink == nil || len(to.String(ercclr.NextLink)) < 1 {
11692		return nil, nil
11693	}
11694	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11695		autorest.AsJSON(),
11696		autorest.AsGet(),
11697		autorest.WithBaseURL(to.String(ercclr.NextLink)))
11698}
11699
11700// ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
11701type ExpressRouteCrossConnectionListResultPage struct {
11702	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
11703	ercclr ExpressRouteCrossConnectionListResult
11704}
11705
11706// NextWithContext advances to the next page of values.  If there was an error making
11707// the request the page does not advance and the error is returned.
11708func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
11709	if tracing.IsEnabled() {
11710		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
11711		defer func() {
11712			sc := -1
11713			if page.Response().Response.Response != nil {
11714				sc = page.Response().Response.Response.StatusCode
11715			}
11716			tracing.EndSpan(ctx, sc, err)
11717		}()
11718	}
11719	next, err := page.fn(ctx, page.ercclr)
11720	if err != nil {
11721		return err
11722	}
11723	page.ercclr = next
11724	return nil
11725}
11726
11727// Next advances to the next page of values.  If there was an error making
11728// the request the page does not advance and the error is returned.
11729// Deprecated: Use NextWithContext() instead.
11730func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
11731	return page.NextWithContext(context.Background())
11732}
11733
11734// NotDone returns true if the page enumeration should be started or is not yet complete.
11735func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
11736	return !page.ercclr.IsEmpty()
11737}
11738
11739// Response returns the raw server response from the last page request.
11740func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
11741	return page.ercclr
11742}
11743
11744// Values returns the slice of values for the current page or nil if there are no values.
11745func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
11746	if page.ercclr.IsEmpty() {
11747		return nil
11748	}
11749	return *page.ercclr.Value
11750}
11751
11752// Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
11753func NewExpressRouteCrossConnectionListResultPage(getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
11754	return ExpressRouteCrossConnectionListResultPage{fn: getNextPage}
11755}
11756
11757// ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
11758type ExpressRouteCrossConnectionPeering struct {
11759	autorest.Response `json:"-"`
11760	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
11761	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
11762	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
11763	Name *string `json:"name,omitempty"`
11764	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
11765	Etag *string `json:"etag,omitempty"`
11766	// ID - Resource ID.
11767	ID *string `json:"id,omitempty"`
11768}
11769
11770// MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
11771func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
11772	objectMap := make(map[string]interface{})
11773	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
11774		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
11775	}
11776	if erccp.Name != nil {
11777		objectMap["name"] = erccp.Name
11778	}
11779	if erccp.ID != nil {
11780		objectMap["id"] = erccp.ID
11781	}
11782	return json.Marshal(objectMap)
11783}
11784
11785// UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
11786func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
11787	var m map[string]*json.RawMessage
11788	err := json.Unmarshal(body, &m)
11789	if err != nil {
11790		return err
11791	}
11792	for k, v := range m {
11793		switch k {
11794		case "properties":
11795			if v != nil {
11796				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
11797				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
11798				if err != nil {
11799					return err
11800				}
11801				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
11802			}
11803		case "name":
11804			if v != nil {
11805				var name string
11806				err = json.Unmarshal(*v, &name)
11807				if err != nil {
11808					return err
11809				}
11810				erccp.Name = &name
11811			}
11812		case "etag":
11813			if v != nil {
11814				var etag string
11815				err = json.Unmarshal(*v, &etag)
11816				if err != nil {
11817					return err
11818				}
11819				erccp.Etag = &etag
11820			}
11821		case "id":
11822			if v != nil {
11823				var ID string
11824				err = json.Unmarshal(*v, &ID)
11825				if err != nil {
11826					return err
11827				}
11828				erccp.ID = &ID
11829			}
11830		}
11831	}
11832
11833	return nil
11834}
11835
11836// ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
11837// that belong to an ExpressRouteCrossConnection.
11838type ExpressRouteCrossConnectionPeeringList struct {
11839	autorest.Response `json:"-"`
11840	// Value - The peerings in an express route cross connection.
11841	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
11842	// NextLink - READ-ONLY; The URL to get the next set of results.
11843	NextLink *string `json:"nextLink,omitempty"`
11844}
11845
11846// ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
11847// ExpressRouteCrossConnectionPeering values.
11848type ExpressRouteCrossConnectionPeeringListIterator struct {
11849	i    int
11850	page ExpressRouteCrossConnectionPeeringListPage
11851}
11852
11853// NextWithContext advances to the next value.  If there was an error making
11854// the request the iterator does not advance and the error is returned.
11855func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
11856	if tracing.IsEnabled() {
11857		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
11858		defer func() {
11859			sc := -1
11860			if iter.Response().Response.Response != nil {
11861				sc = iter.Response().Response.Response.StatusCode
11862			}
11863			tracing.EndSpan(ctx, sc, err)
11864		}()
11865	}
11866	iter.i++
11867	if iter.i < len(iter.page.Values()) {
11868		return nil
11869	}
11870	err = iter.page.NextWithContext(ctx)
11871	if err != nil {
11872		iter.i--
11873		return err
11874	}
11875	iter.i = 0
11876	return nil
11877}
11878
11879// Next advances to the next value.  If there was an error making
11880// the request the iterator does not advance and the error is returned.
11881// Deprecated: Use NextWithContext() instead.
11882func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
11883	return iter.NextWithContext(context.Background())
11884}
11885
11886// NotDone returns true if the enumeration should be started or is not yet complete.
11887func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
11888	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11889}
11890
11891// Response returns the raw server response from the last page request.
11892func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
11893	return iter.page.Response()
11894}
11895
11896// Value returns the current value or a zero-initialized value if the
11897// iterator has advanced beyond the end of the collection.
11898func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
11899	if !iter.page.NotDone() {
11900		return ExpressRouteCrossConnectionPeering{}
11901	}
11902	return iter.page.Values()[iter.i]
11903}
11904
11905// Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
11906func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
11907	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
11908}
11909
11910// IsEmpty returns true if the ListResult contains no values.
11911func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
11912	return erccpl.Value == nil || len(*erccpl.Value) == 0
11913}
11914
11915// expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
11916// It returns nil if no more results exist.
11917func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
11918	if erccpl.NextLink == nil || len(to.String(erccpl.NextLink)) < 1 {
11919		return nil, nil
11920	}
11921	return autorest.Prepare((&http.Request{}).WithContext(ctx),
11922		autorest.AsJSON(),
11923		autorest.AsGet(),
11924		autorest.WithBaseURL(to.String(erccpl.NextLink)))
11925}
11926
11927// ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
11928type ExpressRouteCrossConnectionPeeringListPage struct {
11929	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
11930	erccpl ExpressRouteCrossConnectionPeeringList
11931}
11932
11933// NextWithContext advances to the next page of values.  If there was an error making
11934// the request the page does not advance and the error is returned.
11935func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
11936	if tracing.IsEnabled() {
11937		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
11938		defer func() {
11939			sc := -1
11940			if page.Response().Response.Response != nil {
11941				sc = page.Response().Response.Response.StatusCode
11942			}
11943			tracing.EndSpan(ctx, sc, err)
11944		}()
11945	}
11946	next, err := page.fn(ctx, page.erccpl)
11947	if err != nil {
11948		return err
11949	}
11950	page.erccpl = next
11951	return nil
11952}
11953
11954// Next advances to the next page of values.  If there was an error making
11955// the request the page does not advance and the error is returned.
11956// Deprecated: Use NextWithContext() instead.
11957func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
11958	return page.NextWithContext(context.Background())
11959}
11960
11961// NotDone returns true if the page enumeration should be started or is not yet complete.
11962func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
11963	return !page.erccpl.IsEmpty()
11964}
11965
11966// Response returns the raw server response from the last page request.
11967func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
11968	return page.erccpl
11969}
11970
11971// Values returns the slice of values for the current page or nil if there are no values.
11972func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
11973	if page.erccpl.IsEmpty() {
11974		return nil
11975	}
11976	return *page.erccpl.Value
11977}
11978
11979// Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
11980func NewExpressRouteCrossConnectionPeeringListPage(getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
11981	return ExpressRouteCrossConnectionPeeringListPage{fn: getNextPage}
11982}
11983
11984// ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
11985type ExpressRouteCrossConnectionPeeringProperties struct {
11986	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
11987	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
11988	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
11989	State ExpressRoutePeeringState `json:"state,omitempty"`
11990	// AzureASN - READ-ONLY; The Azure ASN.
11991	AzureASN *int32 `json:"azureASN,omitempty"`
11992	// PeerASN - The peer ASN.
11993	PeerASN *int64 `json:"peerASN,omitempty"`
11994	// PrimaryPeerAddressPrefix - The primary address prefix.
11995	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
11996	// SecondaryPeerAddressPrefix - The secondary address prefix.
11997	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
11998	// PrimaryAzurePort - READ-ONLY; The primary port.
11999	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12000	// SecondaryAzurePort - READ-ONLY; The secondary port.
12001	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12002	// SharedKey - The shared key.
12003	SharedKey *string `json:"sharedKey,omitempty"`
12004	// VlanID - The VLAN ID.
12005	VlanID *int32 `json:"vlanId,omitempty"`
12006	// MicrosoftPeeringConfig - The Microsoft peering configuration.
12007	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
12008	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12009	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12010	// GatewayManagerEtag - The GatewayManager Etag.
12011	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
12012	// LastModifiedBy - Who was the last to modify the peering.
12013	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
12014	// Ipv6PeeringConfig - The IPv6 peering configuration.
12015	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
12016}
12017
12018// ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12019// results of a long-running operation.
12020type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
12021	azure.Future
12022}
12023
12024// Result returns the result of the asynchronous operation.
12025// If the operation has not completed it will return an error.
12026func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
12027	var done bool
12028	done, err = future.DoneWithContext(context.Background(), client)
12029	if err != nil {
12030		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12031		return
12032	}
12033	if !done {
12034		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
12035		return
12036	}
12037	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12038	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
12039		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
12040		if err != nil {
12041			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
12042		}
12043	}
12044	return
12045}
12046
12047// ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
12048// of a long-running operation.
12049type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
12050	azure.Future
12051}
12052
12053// Result returns the result of the asynchronous operation.
12054// If the operation has not completed it will return an error.
12055func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) Result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
12056	var done bool
12057	done, err = future.DoneWithContext(context.Background(), client)
12058	if err != nil {
12059		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
12060		return
12061	}
12062	if !done {
12063		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
12064		return
12065	}
12066	ar.Response = future.Response()
12067	return
12068}
12069
12070// ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
12071type ExpressRouteCrossConnectionProperties struct {
12072	// PrimaryAzurePort - READ-ONLY; The name of the primary port.
12073	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
12074	// SecondaryAzurePort - READ-ONLY; The name of the secondary port.
12075	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
12076	// STag - READ-ONLY; The identifier of the circuit traffic.
12077	STag *int32 `json:"sTag,omitempty"`
12078	// PeeringLocation - The peering location of the ExpressRoute circuit.
12079	PeeringLocation *string `json:"peeringLocation,omitempty"`
12080	// BandwidthInMbps - The circuit bandwidth In Mbps.
12081	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
12082	// ExpressRouteCircuit - The ExpressRouteCircuit.
12083	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
12084	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
12085	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
12086	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
12087	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
12088	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12089	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12090	// Peerings - The list of peerings.
12091	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
12092}
12093
12094// ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
12095type ExpressRouteCrossConnectionRoutesTableSummary struct {
12096	// Neighbor - IP address of Neighbor router.
12097	Neighbor *string `json:"neighbor,omitempty"`
12098	// Asn - Autonomous system number.
12099	Asn *int32 `json:"asn,omitempty"`
12100	// 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.
12101	UpDown *string `json:"upDown,omitempty"`
12102	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
12103	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
12104}
12105
12106// ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
12107// results of a long-running operation.
12108type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
12109	azure.Future
12110}
12111
12112// Result returns the result of the asynchronous operation.
12113// If the operation has not completed it will return an error.
12114func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
12115	var done bool
12116	done, err = future.DoneWithContext(context.Background(), client)
12117	if err != nil {
12118		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12119		return
12120	}
12121	if !done {
12122		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
12123		return
12124	}
12125	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12126	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
12127		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
12128		if err != nil {
12129			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
12130		}
12131	}
12132	return
12133}
12134
12135// ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
12136// of a long-running operation.
12137type ExpressRouteCrossConnectionsListArpTableFuture struct {
12138	azure.Future
12139}
12140
12141// Result returns the result of the asynchronous operation.
12142// If the operation has not completed it will return an error.
12143func (future *ExpressRouteCrossConnectionsListArpTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
12144	var done bool
12145	done, err = future.DoneWithContext(context.Background(), client)
12146	if err != nil {
12147		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
12148		return
12149	}
12150	if !done {
12151		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
12152		return
12153	}
12154	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12155	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
12156		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
12157		if err != nil {
12158			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
12159		}
12160	}
12161	return
12162}
12163
12164// ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
12165// results of a long-running operation.
12166type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
12167	azure.Future
12168}
12169
12170// Result returns the result of the asynchronous operation.
12171// If the operation has not completed it will return an error.
12172func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) Result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
12173	var done bool
12174	done, err = future.DoneWithContext(context.Background(), client)
12175	if err != nil {
12176		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
12177		return
12178	}
12179	if !done {
12180		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
12181		return
12182	}
12183	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12184	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
12185		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
12186		if err != nil {
12187			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
12188		}
12189	}
12190	return
12191}
12192
12193// ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
12194// the results of a long-running operation.
12195type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
12196	azure.Future
12197}
12198
12199// Result returns the result of the asynchronous operation.
12200// If the operation has not completed it will return an error.
12201func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) Result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
12202	var done bool
12203	done, err = future.DoneWithContext(context.Background(), client)
12204	if err != nil {
12205		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
12206		return
12207	}
12208	if !done {
12209		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
12210		return
12211	}
12212	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12213	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
12214		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
12215		if err != nil {
12216			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
12217		}
12218	}
12219	return
12220}
12221
12222// ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
12223// the Express Route Cross Connections.
12224type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
12225	autorest.Response `json:"-"`
12226	// Value - A list of the routes table.
12227	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
12228	// NextLink - READ-ONLY; The URL to get the next set of results.
12229	NextLink *string `json:"nextLink,omitempty"`
12230}
12231
12232// ExpressRouteCrossConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of
12233// a long-running operation.
12234type ExpressRouteCrossConnectionsUpdateTagsFuture struct {
12235	azure.Future
12236}
12237
12238// Result returns the result of the asynchronous operation.
12239// If the operation has not completed it will return an error.
12240func (future *ExpressRouteCrossConnectionsUpdateTagsFuture) Result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
12241	var done bool
12242	done, err = future.DoneWithContext(context.Background(), client)
12243	if err != nil {
12244		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
12245		return
12246	}
12247	if !done {
12248		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsUpdateTagsFuture")
12249		return
12250	}
12251	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12252	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
12253		ercc, err = client.UpdateTagsResponder(ercc.Response.Response)
12254		if err != nil {
12255			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsUpdateTagsFuture", "Result", ercc.Response.Response, "Failure responding to request")
12256		}
12257	}
12258	return
12259}
12260
12261// ExpressRouteGateway expressRoute gateway resource.
12262type ExpressRouteGateway struct {
12263	autorest.Response `json:"-"`
12264	// ExpressRouteGatewayProperties - Properties of the express route gateway.
12265	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
12266	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12267	Etag *string `json:"etag,omitempty"`
12268	// ID - Resource ID.
12269	ID *string `json:"id,omitempty"`
12270	// Name - READ-ONLY; Resource name.
12271	Name *string `json:"name,omitempty"`
12272	// Type - READ-ONLY; Resource type.
12273	Type *string `json:"type,omitempty"`
12274	// Location - Resource location.
12275	Location *string `json:"location,omitempty"`
12276	// Tags - Resource tags.
12277	Tags map[string]*string `json:"tags"`
12278}
12279
12280// MarshalJSON is the custom marshaler for ExpressRouteGateway.
12281func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
12282	objectMap := make(map[string]interface{})
12283	if erg.ExpressRouteGatewayProperties != nil {
12284		objectMap["properties"] = erg.ExpressRouteGatewayProperties
12285	}
12286	if erg.ID != nil {
12287		objectMap["id"] = erg.ID
12288	}
12289	if erg.Location != nil {
12290		objectMap["location"] = erg.Location
12291	}
12292	if erg.Tags != nil {
12293		objectMap["tags"] = erg.Tags
12294	}
12295	return json.Marshal(objectMap)
12296}
12297
12298// UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
12299func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
12300	var m map[string]*json.RawMessage
12301	err := json.Unmarshal(body, &m)
12302	if err != nil {
12303		return err
12304	}
12305	for k, v := range m {
12306		switch k {
12307		case "properties":
12308			if v != nil {
12309				var expressRouteGatewayProperties ExpressRouteGatewayProperties
12310				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
12311				if err != nil {
12312					return err
12313				}
12314				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
12315			}
12316		case "etag":
12317			if v != nil {
12318				var etag string
12319				err = json.Unmarshal(*v, &etag)
12320				if err != nil {
12321					return err
12322				}
12323				erg.Etag = &etag
12324			}
12325		case "id":
12326			if v != nil {
12327				var ID string
12328				err = json.Unmarshal(*v, &ID)
12329				if err != nil {
12330					return err
12331				}
12332				erg.ID = &ID
12333			}
12334		case "name":
12335			if v != nil {
12336				var name string
12337				err = json.Unmarshal(*v, &name)
12338				if err != nil {
12339					return err
12340				}
12341				erg.Name = &name
12342			}
12343		case "type":
12344			if v != nil {
12345				var typeVar string
12346				err = json.Unmarshal(*v, &typeVar)
12347				if err != nil {
12348					return err
12349				}
12350				erg.Type = &typeVar
12351			}
12352		case "location":
12353			if v != nil {
12354				var location string
12355				err = json.Unmarshal(*v, &location)
12356				if err != nil {
12357					return err
12358				}
12359				erg.Location = &location
12360			}
12361		case "tags":
12362			if v != nil {
12363				var tags map[string]*string
12364				err = json.Unmarshal(*v, &tags)
12365				if err != nil {
12366					return err
12367				}
12368				erg.Tags = tags
12369			}
12370		}
12371	}
12372
12373	return nil
12374}
12375
12376// ExpressRouteGatewayList list of ExpressRoute gateways.
12377type ExpressRouteGatewayList struct {
12378	autorest.Response `json:"-"`
12379	// Value - List of ExpressRoute gateways.
12380	Value *[]ExpressRouteGateway `json:"value,omitempty"`
12381}
12382
12383// ExpressRouteGatewayProperties expressRoute gateway resource properties.
12384type ExpressRouteGatewayProperties struct {
12385	// AutoScaleConfiguration - Configuration for auto scaling.
12386	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
12387	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
12388	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
12389	// ProvisioningState - The provisioning state of the express route gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12390	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12391	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
12392	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
12393}
12394
12395// ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
12396type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
12397	// Bounds - Minimum and maximum number of scale units to deploy.
12398	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
12399}
12400
12401// ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
12402// deploy.
12403type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
12404	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
12405	Min *int32 `json:"min,omitempty"`
12406	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
12407	Max *int32 `json:"max,omitempty"`
12408}
12409
12410// ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
12411// long-running operation.
12412type ExpressRouteGatewaysCreateOrUpdateFuture struct {
12413	azure.Future
12414}
12415
12416// Result returns the result of the asynchronous operation.
12417// If the operation has not completed it will return an error.
12418func (future *ExpressRouteGatewaysCreateOrUpdateFuture) Result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
12419	var done bool
12420	done, err = future.DoneWithContext(context.Background(), client)
12421	if err != nil {
12422		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12423		return
12424	}
12425	if !done {
12426		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
12427		return
12428	}
12429	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12430	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
12431		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
12432		if err != nil {
12433			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
12434		}
12435	}
12436	return
12437}
12438
12439// ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
12440// long-running operation.
12441type ExpressRouteGatewaysDeleteFuture struct {
12442	azure.Future
12443}
12444
12445// Result returns the result of the asynchronous operation.
12446// If the operation has not completed it will return an error.
12447func (future *ExpressRouteGatewaysDeleteFuture) Result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
12448	var done bool
12449	done, err = future.DoneWithContext(context.Background(), client)
12450	if err != nil {
12451		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
12452		return
12453	}
12454	if !done {
12455		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
12456		return
12457	}
12458	ar.Response = future.Response()
12459	return
12460}
12461
12462// ExpressRouteLink expressRouteLink child resource definition.
12463type ExpressRouteLink struct {
12464	autorest.Response `json:"-"`
12465	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties.
12466	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
12467	// Name - Name of child port resource that is unique among child port resources of the parent.
12468	Name *string `json:"name,omitempty"`
12469	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12470	Etag *string `json:"etag,omitempty"`
12471	// ID - Resource ID.
12472	ID *string `json:"id,omitempty"`
12473}
12474
12475// MarshalJSON is the custom marshaler for ExpressRouteLink.
12476func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
12477	objectMap := make(map[string]interface{})
12478	if erl.ExpressRouteLinkPropertiesFormat != nil {
12479		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
12480	}
12481	if erl.Name != nil {
12482		objectMap["name"] = erl.Name
12483	}
12484	if erl.ID != nil {
12485		objectMap["id"] = erl.ID
12486	}
12487	return json.Marshal(objectMap)
12488}
12489
12490// UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
12491func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
12492	var m map[string]*json.RawMessage
12493	err := json.Unmarshal(body, &m)
12494	if err != nil {
12495		return err
12496	}
12497	for k, v := range m {
12498		switch k {
12499		case "properties":
12500			if v != nil {
12501				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
12502				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
12503				if err != nil {
12504					return err
12505				}
12506				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
12507			}
12508		case "name":
12509			if v != nil {
12510				var name string
12511				err = json.Unmarshal(*v, &name)
12512				if err != nil {
12513					return err
12514				}
12515				erl.Name = &name
12516			}
12517		case "etag":
12518			if v != nil {
12519				var etag string
12520				err = json.Unmarshal(*v, &etag)
12521				if err != nil {
12522					return err
12523				}
12524				erl.Etag = &etag
12525			}
12526		case "id":
12527			if v != nil {
12528				var ID string
12529				err = json.Unmarshal(*v, &ID)
12530				if err != nil {
12531					return err
12532				}
12533				erl.ID = &ID
12534			}
12535		}
12536	}
12537
12538	return nil
12539}
12540
12541// ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
12542type ExpressRouteLinkListResult struct {
12543	autorest.Response `json:"-"`
12544	// Value - The list of ExpressRouteLink sub-resources.
12545	Value *[]ExpressRouteLink `json:"value,omitempty"`
12546	// NextLink - The URL to get the next set of results.
12547	NextLink *string `json:"nextLink,omitempty"`
12548}
12549
12550// ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
12551type ExpressRouteLinkListResultIterator struct {
12552	i    int
12553	page ExpressRouteLinkListResultPage
12554}
12555
12556// NextWithContext advances to the next value.  If there was an error making
12557// the request the iterator does not advance and the error is returned.
12558func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
12559	if tracing.IsEnabled() {
12560		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
12561		defer func() {
12562			sc := -1
12563			if iter.Response().Response.Response != nil {
12564				sc = iter.Response().Response.Response.StatusCode
12565			}
12566			tracing.EndSpan(ctx, sc, err)
12567		}()
12568	}
12569	iter.i++
12570	if iter.i < len(iter.page.Values()) {
12571		return nil
12572	}
12573	err = iter.page.NextWithContext(ctx)
12574	if err != nil {
12575		iter.i--
12576		return err
12577	}
12578	iter.i = 0
12579	return nil
12580}
12581
12582// Next advances to the next value.  If there was an error making
12583// the request the iterator does not advance and the error is returned.
12584// Deprecated: Use NextWithContext() instead.
12585func (iter *ExpressRouteLinkListResultIterator) Next() error {
12586	return iter.NextWithContext(context.Background())
12587}
12588
12589// NotDone returns true if the enumeration should be started or is not yet complete.
12590func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
12591	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12592}
12593
12594// Response returns the raw server response from the last page request.
12595func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
12596	return iter.page.Response()
12597}
12598
12599// Value returns the current value or a zero-initialized value if the
12600// iterator has advanced beyond the end of the collection.
12601func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
12602	if !iter.page.NotDone() {
12603		return ExpressRouteLink{}
12604	}
12605	return iter.page.Values()[iter.i]
12606}
12607
12608// Creates a new instance of the ExpressRouteLinkListResultIterator type.
12609func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
12610	return ExpressRouteLinkListResultIterator{page: page}
12611}
12612
12613// IsEmpty returns true if the ListResult contains no values.
12614func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
12615	return erllr.Value == nil || len(*erllr.Value) == 0
12616}
12617
12618// expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
12619// It returns nil if no more results exist.
12620func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
12621	if erllr.NextLink == nil || len(to.String(erllr.NextLink)) < 1 {
12622		return nil, nil
12623	}
12624	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12625		autorest.AsJSON(),
12626		autorest.AsGet(),
12627		autorest.WithBaseURL(to.String(erllr.NextLink)))
12628}
12629
12630// ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
12631type ExpressRouteLinkListResultPage struct {
12632	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
12633	erllr ExpressRouteLinkListResult
12634}
12635
12636// NextWithContext advances to the next page of values.  If there was an error making
12637// the request the page does not advance and the error is returned.
12638func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
12639	if tracing.IsEnabled() {
12640		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
12641		defer func() {
12642			sc := -1
12643			if page.Response().Response.Response != nil {
12644				sc = page.Response().Response.Response.StatusCode
12645			}
12646			tracing.EndSpan(ctx, sc, err)
12647		}()
12648	}
12649	next, err := page.fn(ctx, page.erllr)
12650	if err != nil {
12651		return err
12652	}
12653	page.erllr = next
12654	return nil
12655}
12656
12657// Next advances to the next page of values.  If there was an error making
12658// the request the page does not advance and the error is returned.
12659// Deprecated: Use NextWithContext() instead.
12660func (page *ExpressRouteLinkListResultPage) Next() error {
12661	return page.NextWithContext(context.Background())
12662}
12663
12664// NotDone returns true if the page enumeration should be started or is not yet complete.
12665func (page ExpressRouteLinkListResultPage) NotDone() bool {
12666	return !page.erllr.IsEmpty()
12667}
12668
12669// Response returns the raw server response from the last page request.
12670func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
12671	return page.erllr
12672}
12673
12674// Values returns the slice of values for the current page or nil if there are no values.
12675func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
12676	if page.erllr.IsEmpty() {
12677		return nil
12678	}
12679	return *page.erllr.Value
12680}
12681
12682// Creates a new instance of the ExpressRouteLinkListResultPage type.
12683func NewExpressRouteLinkListResultPage(getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
12684	return ExpressRouteLinkListResultPage{fn: getNextPage}
12685}
12686
12687// ExpressRouteLinkMacSecConfig expressRouteLink Mac Security Configuration.
12688type ExpressRouteLinkMacSecConfig struct {
12689	// CknSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CKN key.
12690	CknSecretIdentifier *string `json:"cknSecretIdentifier,omitempty"`
12691	// CakSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CAK key.
12692	CakSecretIdentifier *string `json:"cakSecretIdentifier,omitempty"`
12693	// Cipher - Mac security cipher. Possible values include: 'GcmAes128', 'GcmAes256'
12694	Cipher ExpressRouteLinkMacSecCipher `json:"cipher,omitempty"`
12695}
12696
12697// ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
12698type ExpressRouteLinkPropertiesFormat struct {
12699	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
12700	RouterName *string `json:"routerName,omitempty"`
12701	// InterfaceName - READ-ONLY; Name of Azure router interface.
12702	InterfaceName *string `json:"interfaceName,omitempty"`
12703	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
12704	PatchPanelID *string `json:"patchPanelId,omitempty"`
12705	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
12706	RackID *string `json:"rackId,omitempty"`
12707	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
12708	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
12709	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
12710	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
12711	// ProvisioningState - READ-ONLY; The provisioning state of the express route link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
12712	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
12713	// MacSecConfig - MacSec configuration.
12714	MacSecConfig *ExpressRouteLinkMacSecConfig `json:"macSecConfig,omitempty"`
12715}
12716
12717// ExpressRoutePort expressRoutePort resource definition.
12718type ExpressRoutePort struct {
12719	autorest.Response `json:"-"`
12720	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties.
12721	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
12722	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
12723	Etag *string `json:"etag,omitempty"`
12724	// Identity - The identity of ExpressRoutePort, if configured.
12725	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
12726	// ID - Resource ID.
12727	ID *string `json:"id,omitempty"`
12728	// Name - READ-ONLY; Resource name.
12729	Name *string `json:"name,omitempty"`
12730	// Type - READ-ONLY; Resource type.
12731	Type *string `json:"type,omitempty"`
12732	// Location - Resource location.
12733	Location *string `json:"location,omitempty"`
12734	// Tags - Resource tags.
12735	Tags map[string]*string `json:"tags"`
12736}
12737
12738// MarshalJSON is the custom marshaler for ExpressRoutePort.
12739func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
12740	objectMap := make(map[string]interface{})
12741	if erp.ExpressRoutePortPropertiesFormat != nil {
12742		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
12743	}
12744	if erp.Identity != nil {
12745		objectMap["identity"] = erp.Identity
12746	}
12747	if erp.ID != nil {
12748		objectMap["id"] = erp.ID
12749	}
12750	if erp.Location != nil {
12751		objectMap["location"] = erp.Location
12752	}
12753	if erp.Tags != nil {
12754		objectMap["tags"] = erp.Tags
12755	}
12756	return json.Marshal(objectMap)
12757}
12758
12759// UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
12760func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
12761	var m map[string]*json.RawMessage
12762	err := json.Unmarshal(body, &m)
12763	if err != nil {
12764		return err
12765	}
12766	for k, v := range m {
12767		switch k {
12768		case "properties":
12769			if v != nil {
12770				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
12771				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
12772				if err != nil {
12773					return err
12774				}
12775				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
12776			}
12777		case "etag":
12778			if v != nil {
12779				var etag string
12780				err = json.Unmarshal(*v, &etag)
12781				if err != nil {
12782					return err
12783				}
12784				erp.Etag = &etag
12785			}
12786		case "identity":
12787			if v != nil {
12788				var identity ManagedServiceIdentity
12789				err = json.Unmarshal(*v, &identity)
12790				if err != nil {
12791					return err
12792				}
12793				erp.Identity = &identity
12794			}
12795		case "id":
12796			if v != nil {
12797				var ID string
12798				err = json.Unmarshal(*v, &ID)
12799				if err != nil {
12800					return err
12801				}
12802				erp.ID = &ID
12803			}
12804		case "name":
12805			if v != nil {
12806				var name string
12807				err = json.Unmarshal(*v, &name)
12808				if err != nil {
12809					return err
12810				}
12811				erp.Name = &name
12812			}
12813		case "type":
12814			if v != nil {
12815				var typeVar string
12816				err = json.Unmarshal(*v, &typeVar)
12817				if err != nil {
12818					return err
12819				}
12820				erp.Type = &typeVar
12821			}
12822		case "location":
12823			if v != nil {
12824				var location string
12825				err = json.Unmarshal(*v, &location)
12826				if err != nil {
12827					return err
12828				}
12829				erp.Location = &location
12830			}
12831		case "tags":
12832			if v != nil {
12833				var tags map[string]*string
12834				err = json.Unmarshal(*v, &tags)
12835				if err != nil {
12836					return err
12837				}
12838				erp.Tags = tags
12839			}
12840		}
12841	}
12842
12843	return nil
12844}
12845
12846// ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
12847type ExpressRoutePortListResult struct {
12848	autorest.Response `json:"-"`
12849	// Value - A list of ExpressRoutePort resources.
12850	Value *[]ExpressRoutePort `json:"value,omitempty"`
12851	// NextLink - The URL to get the next set of results.
12852	NextLink *string `json:"nextLink,omitempty"`
12853}
12854
12855// ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
12856type ExpressRoutePortListResultIterator struct {
12857	i    int
12858	page ExpressRoutePortListResultPage
12859}
12860
12861// NextWithContext advances to the next value.  If there was an error making
12862// the request the iterator does not advance and the error is returned.
12863func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
12864	if tracing.IsEnabled() {
12865		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
12866		defer func() {
12867			sc := -1
12868			if iter.Response().Response.Response != nil {
12869				sc = iter.Response().Response.Response.StatusCode
12870			}
12871			tracing.EndSpan(ctx, sc, err)
12872		}()
12873	}
12874	iter.i++
12875	if iter.i < len(iter.page.Values()) {
12876		return nil
12877	}
12878	err = iter.page.NextWithContext(ctx)
12879	if err != nil {
12880		iter.i--
12881		return err
12882	}
12883	iter.i = 0
12884	return nil
12885}
12886
12887// Next advances to the next value.  If there was an error making
12888// the request the iterator does not advance and the error is returned.
12889// Deprecated: Use NextWithContext() instead.
12890func (iter *ExpressRoutePortListResultIterator) Next() error {
12891	return iter.NextWithContext(context.Background())
12892}
12893
12894// NotDone returns true if the enumeration should be started or is not yet complete.
12895func (iter ExpressRoutePortListResultIterator) NotDone() bool {
12896	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12897}
12898
12899// Response returns the raw server response from the last page request.
12900func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
12901	return iter.page.Response()
12902}
12903
12904// Value returns the current value or a zero-initialized value if the
12905// iterator has advanced beyond the end of the collection.
12906func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
12907	if !iter.page.NotDone() {
12908		return ExpressRoutePort{}
12909	}
12910	return iter.page.Values()[iter.i]
12911}
12912
12913// Creates a new instance of the ExpressRoutePortListResultIterator type.
12914func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
12915	return ExpressRoutePortListResultIterator{page: page}
12916}
12917
12918// IsEmpty returns true if the ListResult contains no values.
12919func (erplr ExpressRoutePortListResult) IsEmpty() bool {
12920	return erplr.Value == nil || len(*erplr.Value) == 0
12921}
12922
12923// expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
12924// It returns nil if no more results exist.
12925func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
12926	if erplr.NextLink == nil || len(to.String(erplr.NextLink)) < 1 {
12927		return nil, nil
12928	}
12929	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12930		autorest.AsJSON(),
12931		autorest.AsGet(),
12932		autorest.WithBaseURL(to.String(erplr.NextLink)))
12933}
12934
12935// ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
12936type ExpressRoutePortListResultPage struct {
12937	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
12938	erplr ExpressRoutePortListResult
12939}
12940
12941// NextWithContext advances to the next page of values.  If there was an error making
12942// the request the page does not advance and the error is returned.
12943func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
12944	if tracing.IsEnabled() {
12945		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
12946		defer func() {
12947			sc := -1
12948			if page.Response().Response.Response != nil {
12949				sc = page.Response().Response.Response.StatusCode
12950			}
12951			tracing.EndSpan(ctx, sc, err)
12952		}()
12953	}
12954	next, err := page.fn(ctx, page.erplr)
12955	if err != nil {
12956		return err
12957	}
12958	page.erplr = next
12959	return nil
12960}
12961
12962// Next advances to the next page of values.  If there was an error making
12963// the request the page does not advance and the error is returned.
12964// Deprecated: Use NextWithContext() instead.
12965func (page *ExpressRoutePortListResultPage) Next() error {
12966	return page.NextWithContext(context.Background())
12967}
12968
12969// NotDone returns true if the page enumeration should be started or is not yet complete.
12970func (page ExpressRoutePortListResultPage) NotDone() bool {
12971	return !page.erplr.IsEmpty()
12972}
12973
12974// Response returns the raw server response from the last page request.
12975func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
12976	return page.erplr
12977}
12978
12979// Values returns the slice of values for the current page or nil if there are no values.
12980func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
12981	if page.erplr.IsEmpty() {
12982		return nil
12983	}
12984	return *page.erplr.Value
12985}
12986
12987// Creates a new instance of the ExpressRoutePortListResultPage type.
12988func NewExpressRoutePortListResultPage(getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
12989	return ExpressRoutePortListResultPage{fn: getNextPage}
12990}
12991
12992// ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
12993type ExpressRoutePortPropertiesFormat struct {
12994	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
12995	PeeringLocation *string `json:"peeringLocation,omitempty"`
12996	// BandwidthInGbps - Bandwidth of procured ports in Gbps.
12997	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
12998	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
12999	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
13000	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s).
13001	Mtu *string `json:"mtu,omitempty"`
13002	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
13003	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
13004	// EtherType - READ-ONLY; Ether type of the physical port.
13005	EtherType *string `json:"etherType,omitempty"`
13006	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
13007	AllocationDate *string `json:"allocationDate,omitempty"`
13008	// Links - The set of physical links of the ExpressRoutePort resource.
13009	Links *[]ExpressRouteLink `json:"links,omitempty"`
13010	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
13011	Circuits *[]SubResource `json:"circuits,omitempty"`
13012	// ProvisioningState - READ-ONLY; The provisioning state of the express route port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13013	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13014	// ResourceGUID - The resource GUID property of the express route port resource.
13015	ResourceGUID *string `json:"resourceGuid,omitempty"`
13016}
13017
13018// ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13019// long-running operation.
13020type ExpressRoutePortsCreateOrUpdateFuture struct {
13021	azure.Future
13022}
13023
13024// Result returns the result of the asynchronous operation.
13025// If the operation has not completed it will return an error.
13026func (future *ExpressRoutePortsCreateOrUpdateFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
13027	var done bool
13028	done, err = future.DoneWithContext(context.Background(), client)
13029	if err != nil {
13030		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13031		return
13032	}
13033	if !done {
13034		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
13035		return
13036	}
13037	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13038	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
13039		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
13040		if err != nil {
13041			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
13042		}
13043	}
13044	return
13045}
13046
13047// ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13048// operation.
13049type ExpressRoutePortsDeleteFuture struct {
13050	azure.Future
13051}
13052
13053// Result returns the result of the asynchronous operation.
13054// If the operation has not completed it will return an error.
13055func (future *ExpressRoutePortsDeleteFuture) Result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
13056	var done bool
13057	done, err = future.DoneWithContext(context.Background(), client)
13058	if err != nil {
13059		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
13060		return
13061	}
13062	if !done {
13063		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
13064		return
13065	}
13066	ar.Response = future.Response()
13067	return
13068}
13069
13070// ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
13071type ExpressRoutePortsLocation struct {
13072	autorest.Response `json:"-"`
13073	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties.
13074	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
13075	// ID - Resource ID.
13076	ID *string `json:"id,omitempty"`
13077	// Name - READ-ONLY; Resource name.
13078	Name *string `json:"name,omitempty"`
13079	// Type - READ-ONLY; Resource type.
13080	Type *string `json:"type,omitempty"`
13081	// Location - Resource location.
13082	Location *string `json:"location,omitempty"`
13083	// Tags - Resource tags.
13084	Tags map[string]*string `json:"tags"`
13085}
13086
13087// MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
13088func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
13089	objectMap := make(map[string]interface{})
13090	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
13091		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
13092	}
13093	if erpl.ID != nil {
13094		objectMap["id"] = erpl.ID
13095	}
13096	if erpl.Location != nil {
13097		objectMap["location"] = erpl.Location
13098	}
13099	if erpl.Tags != nil {
13100		objectMap["tags"] = erpl.Tags
13101	}
13102	return json.Marshal(objectMap)
13103}
13104
13105// UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
13106func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
13107	var m map[string]*json.RawMessage
13108	err := json.Unmarshal(body, &m)
13109	if err != nil {
13110		return err
13111	}
13112	for k, v := range m {
13113		switch k {
13114		case "properties":
13115			if v != nil {
13116				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
13117				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
13118				if err != nil {
13119					return err
13120				}
13121				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
13122			}
13123		case "id":
13124			if v != nil {
13125				var ID string
13126				err = json.Unmarshal(*v, &ID)
13127				if err != nil {
13128					return err
13129				}
13130				erpl.ID = &ID
13131			}
13132		case "name":
13133			if v != nil {
13134				var name string
13135				err = json.Unmarshal(*v, &name)
13136				if err != nil {
13137					return err
13138				}
13139				erpl.Name = &name
13140			}
13141		case "type":
13142			if v != nil {
13143				var typeVar string
13144				err = json.Unmarshal(*v, &typeVar)
13145				if err != nil {
13146					return err
13147				}
13148				erpl.Type = &typeVar
13149			}
13150		case "location":
13151			if v != nil {
13152				var location string
13153				err = json.Unmarshal(*v, &location)
13154				if err != nil {
13155					return err
13156				}
13157				erpl.Location = &location
13158			}
13159		case "tags":
13160			if v != nil {
13161				var tags map[string]*string
13162				err = json.Unmarshal(*v, &tags)
13163				if err != nil {
13164					return err
13165				}
13166				erpl.Tags = tags
13167			}
13168		}
13169	}
13170
13171	return nil
13172}
13173
13174// ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
13175type ExpressRoutePortsLocationBandwidths struct {
13176	// OfferName - READ-ONLY; Bandwidth descriptive name.
13177	OfferName *string `json:"offerName,omitempty"`
13178	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps.
13179	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
13180}
13181
13182// ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
13183type ExpressRoutePortsLocationListResult struct {
13184	autorest.Response `json:"-"`
13185	// Value - The list of all ExpressRoutePort peering locations.
13186	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
13187	// NextLink - The URL to get the next set of results.
13188	NextLink *string `json:"nextLink,omitempty"`
13189}
13190
13191// ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
13192// ExpressRoutePortsLocation values.
13193type ExpressRoutePortsLocationListResultIterator struct {
13194	i    int
13195	page ExpressRoutePortsLocationListResultPage
13196}
13197
13198// NextWithContext advances to the next value.  If there was an error making
13199// the request the iterator does not advance and the error is returned.
13200func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
13201	if tracing.IsEnabled() {
13202		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
13203		defer func() {
13204			sc := -1
13205			if iter.Response().Response.Response != nil {
13206				sc = iter.Response().Response.Response.StatusCode
13207			}
13208			tracing.EndSpan(ctx, sc, err)
13209		}()
13210	}
13211	iter.i++
13212	if iter.i < len(iter.page.Values()) {
13213		return nil
13214	}
13215	err = iter.page.NextWithContext(ctx)
13216	if err != nil {
13217		iter.i--
13218		return err
13219	}
13220	iter.i = 0
13221	return nil
13222}
13223
13224// Next advances to the next value.  If there was an error making
13225// the request the iterator does not advance and the error is returned.
13226// Deprecated: Use NextWithContext() instead.
13227func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
13228	return iter.NextWithContext(context.Background())
13229}
13230
13231// NotDone returns true if the enumeration should be started or is not yet complete.
13232func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
13233	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13234}
13235
13236// Response returns the raw server response from the last page request.
13237func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
13238	return iter.page.Response()
13239}
13240
13241// Value returns the current value or a zero-initialized value if the
13242// iterator has advanced beyond the end of the collection.
13243func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
13244	if !iter.page.NotDone() {
13245		return ExpressRoutePortsLocation{}
13246	}
13247	return iter.page.Values()[iter.i]
13248}
13249
13250// Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
13251func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
13252	return ExpressRoutePortsLocationListResultIterator{page: page}
13253}
13254
13255// IsEmpty returns true if the ListResult contains no values.
13256func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
13257	return erpllr.Value == nil || len(*erpllr.Value) == 0
13258}
13259
13260// expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
13261// It returns nil if no more results exist.
13262func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
13263	if erpllr.NextLink == nil || len(to.String(erpllr.NextLink)) < 1 {
13264		return nil, nil
13265	}
13266	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13267		autorest.AsJSON(),
13268		autorest.AsGet(),
13269		autorest.WithBaseURL(to.String(erpllr.NextLink)))
13270}
13271
13272// ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
13273type ExpressRoutePortsLocationListResultPage struct {
13274	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
13275	erpllr ExpressRoutePortsLocationListResult
13276}
13277
13278// NextWithContext advances to the next page of values.  If there was an error making
13279// the request the page does not advance and the error is returned.
13280func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
13281	if tracing.IsEnabled() {
13282		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
13283		defer func() {
13284			sc := -1
13285			if page.Response().Response.Response != nil {
13286				sc = page.Response().Response.Response.StatusCode
13287			}
13288			tracing.EndSpan(ctx, sc, err)
13289		}()
13290	}
13291	next, err := page.fn(ctx, page.erpllr)
13292	if err != nil {
13293		return err
13294	}
13295	page.erpllr = next
13296	return nil
13297}
13298
13299// Next advances to the next page of values.  If there was an error making
13300// the request the page does not advance and the error is returned.
13301// Deprecated: Use NextWithContext() instead.
13302func (page *ExpressRoutePortsLocationListResultPage) Next() error {
13303	return page.NextWithContext(context.Background())
13304}
13305
13306// NotDone returns true if the page enumeration should be started or is not yet complete.
13307func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
13308	return !page.erpllr.IsEmpty()
13309}
13310
13311// Response returns the raw server response from the last page request.
13312func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
13313	return page.erpllr
13314}
13315
13316// Values returns the slice of values for the current page or nil if there are no values.
13317func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
13318	if page.erpllr.IsEmpty() {
13319		return nil
13320	}
13321	return *page.erpllr.Value
13322}
13323
13324// Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
13325func NewExpressRoutePortsLocationListResultPage(getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
13326	return ExpressRoutePortsLocationListResultPage{fn: getNextPage}
13327}
13328
13329// ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
13330// resources.
13331type ExpressRoutePortsLocationPropertiesFormat struct {
13332	// Address - READ-ONLY; Address of peering location.
13333	Address *string `json:"address,omitempty"`
13334	// Contact - READ-ONLY; Contact details of peering locations.
13335	Contact *string `json:"contact,omitempty"`
13336	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
13337	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
13338	// ProvisioningState - READ-ONLY; The provisioning state of the express route port location resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13339	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13340}
13341
13342// ExpressRoutePortsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
13343// long-running operation.
13344type ExpressRoutePortsUpdateTagsFuture struct {
13345	azure.Future
13346}
13347
13348// Result returns the result of the asynchronous operation.
13349// If the operation has not completed it will return an error.
13350func (future *ExpressRoutePortsUpdateTagsFuture) Result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
13351	var done bool
13352	done, err = future.DoneWithContext(context.Background(), client)
13353	if err != nil {
13354		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
13355		return
13356	}
13357	if !done {
13358		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsUpdateTagsFuture")
13359		return
13360	}
13361	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13362	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
13363		erp, err = client.UpdateTagsResponder(erp.Response.Response)
13364		if err != nil {
13365			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsUpdateTagsFuture", "Result", erp.Response.Response, "Failure responding to request")
13366		}
13367	}
13368	return
13369}
13370
13371// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
13372type ExpressRouteServiceProvider struct {
13373	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
13374	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
13375	// ID - Resource ID.
13376	ID *string `json:"id,omitempty"`
13377	// Name - READ-ONLY; Resource name.
13378	Name *string `json:"name,omitempty"`
13379	// Type - READ-ONLY; Resource type.
13380	Type *string `json:"type,omitempty"`
13381	// Location - Resource location.
13382	Location *string `json:"location,omitempty"`
13383	// Tags - Resource tags.
13384	Tags map[string]*string `json:"tags"`
13385}
13386
13387// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
13388func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
13389	objectMap := make(map[string]interface{})
13390	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
13391		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
13392	}
13393	if ersp.ID != nil {
13394		objectMap["id"] = ersp.ID
13395	}
13396	if ersp.Location != nil {
13397		objectMap["location"] = ersp.Location
13398	}
13399	if ersp.Tags != nil {
13400		objectMap["tags"] = ersp.Tags
13401	}
13402	return json.Marshal(objectMap)
13403}
13404
13405// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
13406func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
13407	var m map[string]*json.RawMessage
13408	err := json.Unmarshal(body, &m)
13409	if err != nil {
13410		return err
13411	}
13412	for k, v := range m {
13413		switch k {
13414		case "properties":
13415			if v != nil {
13416				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
13417				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
13418				if err != nil {
13419					return err
13420				}
13421				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
13422			}
13423		case "id":
13424			if v != nil {
13425				var ID string
13426				err = json.Unmarshal(*v, &ID)
13427				if err != nil {
13428					return err
13429				}
13430				ersp.ID = &ID
13431			}
13432		case "name":
13433			if v != nil {
13434				var name string
13435				err = json.Unmarshal(*v, &name)
13436				if err != nil {
13437					return err
13438				}
13439				ersp.Name = &name
13440			}
13441		case "type":
13442			if v != nil {
13443				var typeVar string
13444				err = json.Unmarshal(*v, &typeVar)
13445				if err != nil {
13446					return err
13447				}
13448				ersp.Type = &typeVar
13449			}
13450		case "location":
13451			if v != nil {
13452				var location string
13453				err = json.Unmarshal(*v, &location)
13454				if err != nil {
13455					return err
13456				}
13457				ersp.Location = &location
13458			}
13459		case "tags":
13460			if v != nil {
13461				var tags map[string]*string
13462				err = json.Unmarshal(*v, &tags)
13463				if err != nil {
13464					return err
13465				}
13466				ersp.Tags = tags
13467			}
13468		}
13469	}
13470
13471	return nil
13472}
13473
13474// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
13475// resources.
13476type ExpressRouteServiceProviderBandwidthsOffered struct {
13477	// OfferName - The OfferName.
13478	OfferName *string `json:"offerName,omitempty"`
13479	// ValueInMbps - The ValueInMbps.
13480	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
13481}
13482
13483// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
13484type ExpressRouteServiceProviderListResult struct {
13485	autorest.Response `json:"-"`
13486	// Value - A list of ExpressRouteResourceProvider resources.
13487	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
13488	// NextLink - The URL to get the next set of results.
13489	NextLink *string `json:"nextLink,omitempty"`
13490}
13491
13492// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
13493// ExpressRouteServiceProvider values.
13494type ExpressRouteServiceProviderListResultIterator struct {
13495	i    int
13496	page ExpressRouteServiceProviderListResultPage
13497}
13498
13499// NextWithContext advances to the next value.  If there was an error making
13500// the request the iterator does not advance and the error is returned.
13501func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
13502	if tracing.IsEnabled() {
13503		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
13504		defer func() {
13505			sc := -1
13506			if iter.Response().Response.Response != nil {
13507				sc = iter.Response().Response.Response.StatusCode
13508			}
13509			tracing.EndSpan(ctx, sc, err)
13510		}()
13511	}
13512	iter.i++
13513	if iter.i < len(iter.page.Values()) {
13514		return nil
13515	}
13516	err = iter.page.NextWithContext(ctx)
13517	if err != nil {
13518		iter.i--
13519		return err
13520	}
13521	iter.i = 0
13522	return nil
13523}
13524
13525// Next advances to the next value.  If there was an error making
13526// the request the iterator does not advance and the error is returned.
13527// Deprecated: Use NextWithContext() instead.
13528func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
13529	return iter.NextWithContext(context.Background())
13530}
13531
13532// NotDone returns true if the enumeration should be started or is not yet complete.
13533func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
13534	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13535}
13536
13537// Response returns the raw server response from the last page request.
13538func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
13539	return iter.page.Response()
13540}
13541
13542// Value returns the current value or a zero-initialized value if the
13543// iterator has advanced beyond the end of the collection.
13544func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
13545	if !iter.page.NotDone() {
13546		return ExpressRouteServiceProvider{}
13547	}
13548	return iter.page.Values()[iter.i]
13549}
13550
13551// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
13552func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
13553	return ExpressRouteServiceProviderListResultIterator{page: page}
13554}
13555
13556// IsEmpty returns true if the ListResult contains no values.
13557func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
13558	return ersplr.Value == nil || len(*ersplr.Value) == 0
13559}
13560
13561// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
13562// It returns nil if no more results exist.
13563func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
13564	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
13565		return nil, nil
13566	}
13567	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13568		autorest.AsJSON(),
13569		autorest.AsGet(),
13570		autorest.WithBaseURL(to.String(ersplr.NextLink)))
13571}
13572
13573// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
13574type ExpressRouteServiceProviderListResultPage struct {
13575	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
13576	ersplr ExpressRouteServiceProviderListResult
13577}
13578
13579// NextWithContext advances to the next page of values.  If there was an error making
13580// the request the page does not advance and the error is returned.
13581func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
13582	if tracing.IsEnabled() {
13583		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
13584		defer func() {
13585			sc := -1
13586			if page.Response().Response.Response != nil {
13587				sc = page.Response().Response.Response.StatusCode
13588			}
13589			tracing.EndSpan(ctx, sc, err)
13590		}()
13591	}
13592	next, err := page.fn(ctx, page.ersplr)
13593	if err != nil {
13594		return err
13595	}
13596	page.ersplr = next
13597	return nil
13598}
13599
13600// Next advances to the next page of values.  If there was an error making
13601// the request the page does not advance and the error is returned.
13602// Deprecated: Use NextWithContext() instead.
13603func (page *ExpressRouteServiceProviderListResultPage) Next() error {
13604	return page.NextWithContext(context.Background())
13605}
13606
13607// NotDone returns true if the page enumeration should be started or is not yet complete.
13608func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
13609	return !page.ersplr.IsEmpty()
13610}
13611
13612// Response returns the raw server response from the last page request.
13613func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
13614	return page.ersplr
13615}
13616
13617// Values returns the slice of values for the current page or nil if there are no values.
13618func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
13619	if page.ersplr.IsEmpty() {
13620		return nil
13621	}
13622	return *page.ersplr.Value
13623}
13624
13625// Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
13626func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
13627	return ExpressRouteServiceProviderListResultPage{fn: getNextPage}
13628}
13629
13630// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
13631type ExpressRouteServiceProviderPropertiesFormat struct {
13632	// PeeringLocations - A list of peering locations.
13633	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
13634	// BandwidthsOffered - A list of bandwidths offered.
13635	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
13636	// ProvisioningState - The provisioning state of the express route service provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
13637	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
13638}
13639
13640// FirewallPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
13641// long-running operation.
13642type FirewallPoliciesCreateOrUpdateFuture struct {
13643	azure.Future
13644}
13645
13646// Result returns the result of the asynchronous operation.
13647// If the operation has not completed it will return an error.
13648func (future *FirewallPoliciesCreateOrUpdateFuture) Result(client FirewallPoliciesClient) (fp FirewallPolicy, err error) {
13649	var done bool
13650	done, err = future.DoneWithContext(context.Background(), client)
13651	if err != nil {
13652		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13653		return
13654	}
13655	if !done {
13656		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesCreateOrUpdateFuture")
13657		return
13658	}
13659	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13660	if fp.Response.Response, err = future.GetResult(sender); err == nil && fp.Response.Response.StatusCode != http.StatusNoContent {
13661		fp, err = client.CreateOrUpdateResponder(fp.Response.Response)
13662		if err != nil {
13663			err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", fp.Response.Response, "Failure responding to request")
13664		}
13665	}
13666	return
13667}
13668
13669// FirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
13670// operation.
13671type FirewallPoliciesDeleteFuture struct {
13672	azure.Future
13673}
13674
13675// Result returns the result of the asynchronous operation.
13676// If the operation has not completed it will return an error.
13677func (future *FirewallPoliciesDeleteFuture) Result(client FirewallPoliciesClient) (ar autorest.Response, err error) {
13678	var done bool
13679	done, err = future.DoneWithContext(context.Background(), client)
13680	if err != nil {
13681		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
13682		return
13683	}
13684	if !done {
13685		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesDeleteFuture")
13686		return
13687	}
13688	ar.Response = future.Response()
13689	return
13690}
13691
13692// FirewallPolicy firewallPolicy Resource.
13693type FirewallPolicy struct {
13694	autorest.Response `json:"-"`
13695	// FirewallPolicyPropertiesFormat - Properties of the firewall policy.
13696	*FirewallPolicyPropertiesFormat `json:"properties,omitempty"`
13697	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
13698	Etag *string `json:"etag,omitempty"`
13699	// ID - Resource ID.
13700	ID *string `json:"id,omitempty"`
13701	// Name - READ-ONLY; Resource name.
13702	Name *string `json:"name,omitempty"`
13703	// Type - READ-ONLY; Resource type.
13704	Type *string `json:"type,omitempty"`
13705	// Location - Resource location.
13706	Location *string `json:"location,omitempty"`
13707	// Tags - Resource tags.
13708	Tags map[string]*string `json:"tags"`
13709}
13710
13711// MarshalJSON is the custom marshaler for FirewallPolicy.
13712func (fp FirewallPolicy) MarshalJSON() ([]byte, error) {
13713	objectMap := make(map[string]interface{})
13714	if fp.FirewallPolicyPropertiesFormat != nil {
13715		objectMap["properties"] = fp.FirewallPolicyPropertiesFormat
13716	}
13717	if fp.ID != nil {
13718		objectMap["id"] = fp.ID
13719	}
13720	if fp.Location != nil {
13721		objectMap["location"] = fp.Location
13722	}
13723	if fp.Tags != nil {
13724		objectMap["tags"] = fp.Tags
13725	}
13726	return json.Marshal(objectMap)
13727}
13728
13729// UnmarshalJSON is the custom unmarshaler for FirewallPolicy struct.
13730func (fp *FirewallPolicy) UnmarshalJSON(body []byte) error {
13731	var m map[string]*json.RawMessage
13732	err := json.Unmarshal(body, &m)
13733	if err != nil {
13734		return err
13735	}
13736	for k, v := range m {
13737		switch k {
13738		case "properties":
13739			if v != nil {
13740				var firewallPolicyPropertiesFormat FirewallPolicyPropertiesFormat
13741				err = json.Unmarshal(*v, &firewallPolicyPropertiesFormat)
13742				if err != nil {
13743					return err
13744				}
13745				fp.FirewallPolicyPropertiesFormat = &firewallPolicyPropertiesFormat
13746			}
13747		case "etag":
13748			if v != nil {
13749				var etag string
13750				err = json.Unmarshal(*v, &etag)
13751				if err != nil {
13752					return err
13753				}
13754				fp.Etag = &etag
13755			}
13756		case "id":
13757			if v != nil {
13758				var ID string
13759				err = json.Unmarshal(*v, &ID)
13760				if err != nil {
13761					return err
13762				}
13763				fp.ID = &ID
13764			}
13765		case "name":
13766			if v != nil {
13767				var name string
13768				err = json.Unmarshal(*v, &name)
13769				if err != nil {
13770					return err
13771				}
13772				fp.Name = &name
13773			}
13774		case "type":
13775			if v != nil {
13776				var typeVar string
13777				err = json.Unmarshal(*v, &typeVar)
13778				if err != nil {
13779					return err
13780				}
13781				fp.Type = &typeVar
13782			}
13783		case "location":
13784			if v != nil {
13785				var location string
13786				err = json.Unmarshal(*v, &location)
13787				if err != nil {
13788					return err
13789				}
13790				fp.Location = &location
13791			}
13792		case "tags":
13793			if v != nil {
13794				var tags map[string]*string
13795				err = json.Unmarshal(*v, &tags)
13796				if err != nil {
13797					return err
13798				}
13799				fp.Tags = tags
13800			}
13801		}
13802	}
13803
13804	return nil
13805}
13806
13807// FirewallPolicyFilterRule firewall Policy Filter Rule.
13808type FirewallPolicyFilterRule struct {
13809	// Action - The action type of a Filter rule.
13810	Action *FirewallPolicyFilterRuleAction `json:"action,omitempty"`
13811	// RuleConditions - Collection of rule conditions used by a rule.
13812	RuleConditions *[]BasicFirewallPolicyRuleCondition `json:"ruleConditions,omitempty"`
13813	// Name - The name of the rule.
13814	Name *string `json:"name,omitempty"`
13815	// Priority - Priority of the Firewall Policy Rule resource.
13816	Priority *int32 `json:"priority,omitempty"`
13817	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
13818	RuleType RuleType `json:"ruleType,omitempty"`
13819}
13820
13821// MarshalJSON is the custom marshaler for FirewallPolicyFilterRule.
13822func (fpfr FirewallPolicyFilterRule) MarshalJSON() ([]byte, error) {
13823	fpfr.RuleType = RuleTypeFirewallPolicyFilterRule
13824	objectMap := make(map[string]interface{})
13825	if fpfr.Action != nil {
13826		objectMap["action"] = fpfr.Action
13827	}
13828	if fpfr.RuleConditions != nil {
13829		objectMap["ruleConditions"] = fpfr.RuleConditions
13830	}
13831	if fpfr.Name != nil {
13832		objectMap["name"] = fpfr.Name
13833	}
13834	if fpfr.Priority != nil {
13835		objectMap["priority"] = fpfr.Priority
13836	}
13837	if fpfr.RuleType != "" {
13838		objectMap["ruleType"] = fpfr.RuleType
13839	}
13840	return json.Marshal(objectMap)
13841}
13842
13843// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
13844func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
13845	return nil, false
13846}
13847
13848// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
13849func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
13850	return &fpfr, true
13851}
13852
13853// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
13854func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
13855	return nil, false
13856}
13857
13858// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
13859func (fpfr FirewallPolicyFilterRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
13860	return &fpfr, true
13861}
13862
13863// UnmarshalJSON is the custom unmarshaler for FirewallPolicyFilterRule struct.
13864func (fpfr *FirewallPolicyFilterRule) UnmarshalJSON(body []byte) error {
13865	var m map[string]*json.RawMessage
13866	err := json.Unmarshal(body, &m)
13867	if err != nil {
13868		return err
13869	}
13870	for k, v := range m {
13871		switch k {
13872		case "action":
13873			if v != nil {
13874				var action FirewallPolicyFilterRuleAction
13875				err = json.Unmarshal(*v, &action)
13876				if err != nil {
13877					return err
13878				}
13879				fpfr.Action = &action
13880			}
13881		case "ruleConditions":
13882			if v != nil {
13883				ruleConditions, err := unmarshalBasicFirewallPolicyRuleConditionArray(*v)
13884				if err != nil {
13885					return err
13886				}
13887				fpfr.RuleConditions = &ruleConditions
13888			}
13889		case "name":
13890			if v != nil {
13891				var name string
13892				err = json.Unmarshal(*v, &name)
13893				if err != nil {
13894					return err
13895				}
13896				fpfr.Name = &name
13897			}
13898		case "priority":
13899			if v != nil {
13900				var priority int32
13901				err = json.Unmarshal(*v, &priority)
13902				if err != nil {
13903					return err
13904				}
13905				fpfr.Priority = &priority
13906			}
13907		case "ruleType":
13908			if v != nil {
13909				var ruleType RuleType
13910				err = json.Unmarshal(*v, &ruleType)
13911				if err != nil {
13912					return err
13913				}
13914				fpfr.RuleType = ruleType
13915			}
13916		}
13917	}
13918
13919	return nil
13920}
13921
13922// FirewallPolicyFilterRuleAction properties of the FirewallPolicyFilterRuleAction.
13923type FirewallPolicyFilterRuleAction struct {
13924	// Type - The type of action. Possible values include: 'FirewallPolicyFilterRuleActionTypeAllow', 'FirewallPolicyFilterRuleActionTypeDeny', 'FirewallPolicyFilterRuleActionTypeAlert'
13925	Type FirewallPolicyFilterRuleActionType `json:"type,omitempty"`
13926}
13927
13928// FirewallPolicyListResult response for ListFirewallPolicies API service call.
13929type FirewallPolicyListResult struct {
13930	autorest.Response `json:"-"`
13931	// Value - List of Firewall Policies in a resource group.
13932	Value *[]FirewallPolicy `json:"value,omitempty"`
13933	// NextLink - URL to get the next set of results.
13934	NextLink *string `json:"nextLink,omitempty"`
13935}
13936
13937// FirewallPolicyListResultIterator provides access to a complete listing of FirewallPolicy values.
13938type FirewallPolicyListResultIterator struct {
13939	i    int
13940	page FirewallPolicyListResultPage
13941}
13942
13943// NextWithContext advances to the next value.  If there was an error making
13944// the request the iterator does not advance and the error is returned.
13945func (iter *FirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
13946	if tracing.IsEnabled() {
13947		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultIterator.NextWithContext")
13948		defer func() {
13949			sc := -1
13950			if iter.Response().Response.Response != nil {
13951				sc = iter.Response().Response.Response.StatusCode
13952			}
13953			tracing.EndSpan(ctx, sc, err)
13954		}()
13955	}
13956	iter.i++
13957	if iter.i < len(iter.page.Values()) {
13958		return nil
13959	}
13960	err = iter.page.NextWithContext(ctx)
13961	if err != nil {
13962		iter.i--
13963		return err
13964	}
13965	iter.i = 0
13966	return nil
13967}
13968
13969// Next advances to the next value.  If there was an error making
13970// the request the iterator does not advance and the error is returned.
13971// Deprecated: Use NextWithContext() instead.
13972func (iter *FirewallPolicyListResultIterator) Next() error {
13973	return iter.NextWithContext(context.Background())
13974}
13975
13976// NotDone returns true if the enumeration should be started or is not yet complete.
13977func (iter FirewallPolicyListResultIterator) NotDone() bool {
13978	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13979}
13980
13981// Response returns the raw server response from the last page request.
13982func (iter FirewallPolicyListResultIterator) Response() FirewallPolicyListResult {
13983	return iter.page.Response()
13984}
13985
13986// Value returns the current value or a zero-initialized value if the
13987// iterator has advanced beyond the end of the collection.
13988func (iter FirewallPolicyListResultIterator) Value() FirewallPolicy {
13989	if !iter.page.NotDone() {
13990		return FirewallPolicy{}
13991	}
13992	return iter.page.Values()[iter.i]
13993}
13994
13995// Creates a new instance of the FirewallPolicyListResultIterator type.
13996func NewFirewallPolicyListResultIterator(page FirewallPolicyListResultPage) FirewallPolicyListResultIterator {
13997	return FirewallPolicyListResultIterator{page: page}
13998}
13999
14000// IsEmpty returns true if the ListResult contains no values.
14001func (fplr FirewallPolicyListResult) IsEmpty() bool {
14002	return fplr.Value == nil || len(*fplr.Value) == 0
14003}
14004
14005// firewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
14006// It returns nil if no more results exist.
14007func (fplr FirewallPolicyListResult) firewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
14008	if fplr.NextLink == nil || len(to.String(fplr.NextLink)) < 1 {
14009		return nil, nil
14010	}
14011	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14012		autorest.AsJSON(),
14013		autorest.AsGet(),
14014		autorest.WithBaseURL(to.String(fplr.NextLink)))
14015}
14016
14017// FirewallPolicyListResultPage contains a page of FirewallPolicy values.
14018type FirewallPolicyListResultPage struct {
14019	fn   func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)
14020	fplr FirewallPolicyListResult
14021}
14022
14023// NextWithContext advances to the next page of values.  If there was an error making
14024// the request the page does not advance and the error is returned.
14025func (page *FirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
14026	if tracing.IsEnabled() {
14027		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultPage.NextWithContext")
14028		defer func() {
14029			sc := -1
14030			if page.Response().Response.Response != nil {
14031				sc = page.Response().Response.Response.StatusCode
14032			}
14033			tracing.EndSpan(ctx, sc, err)
14034		}()
14035	}
14036	next, err := page.fn(ctx, page.fplr)
14037	if err != nil {
14038		return err
14039	}
14040	page.fplr = next
14041	return nil
14042}
14043
14044// Next advances to the next page of values.  If there was an error making
14045// the request the page does not advance and the error is returned.
14046// Deprecated: Use NextWithContext() instead.
14047func (page *FirewallPolicyListResultPage) Next() error {
14048	return page.NextWithContext(context.Background())
14049}
14050
14051// NotDone returns true if the page enumeration should be started or is not yet complete.
14052func (page FirewallPolicyListResultPage) NotDone() bool {
14053	return !page.fplr.IsEmpty()
14054}
14055
14056// Response returns the raw server response from the last page request.
14057func (page FirewallPolicyListResultPage) Response() FirewallPolicyListResult {
14058	return page.fplr
14059}
14060
14061// Values returns the slice of values for the current page or nil if there are no values.
14062func (page FirewallPolicyListResultPage) Values() []FirewallPolicy {
14063	if page.fplr.IsEmpty() {
14064		return nil
14065	}
14066	return *page.fplr.Value
14067}
14068
14069// Creates a new instance of the FirewallPolicyListResultPage type.
14070func NewFirewallPolicyListResultPage(getNextPage func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)) FirewallPolicyListResultPage {
14071	return FirewallPolicyListResultPage{fn: getNextPage}
14072}
14073
14074// FirewallPolicyNatRule firewall Policy NAT Rule.
14075type FirewallPolicyNatRule struct {
14076	// Action - The action type of a Nat rule.
14077	Action *FirewallPolicyNatRuleAction `json:"action,omitempty"`
14078	// TranslatedAddress - The translated address for this NAT rule.
14079	TranslatedAddress *string `json:"translatedAddress,omitempty"`
14080	// TranslatedPort - The translated port for this NAT rule.
14081	TranslatedPort *string `json:"translatedPort,omitempty"`
14082	// RuleCondition - The match conditions for incoming traffic.
14083	RuleCondition BasicFirewallPolicyRuleCondition `json:"ruleCondition,omitempty"`
14084	// Name - The name of the rule.
14085	Name *string `json:"name,omitempty"`
14086	// Priority - Priority of the Firewall Policy Rule resource.
14087	Priority *int32 `json:"priority,omitempty"`
14088	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14089	RuleType RuleType `json:"ruleType,omitempty"`
14090}
14091
14092// MarshalJSON is the custom marshaler for FirewallPolicyNatRule.
14093func (fpnr FirewallPolicyNatRule) MarshalJSON() ([]byte, error) {
14094	fpnr.RuleType = RuleTypeFirewallPolicyNatRule
14095	objectMap := make(map[string]interface{})
14096	if fpnr.Action != nil {
14097		objectMap["action"] = fpnr.Action
14098	}
14099	if fpnr.TranslatedAddress != nil {
14100		objectMap["translatedAddress"] = fpnr.TranslatedAddress
14101	}
14102	if fpnr.TranslatedPort != nil {
14103		objectMap["translatedPort"] = fpnr.TranslatedPort
14104	}
14105	objectMap["ruleCondition"] = fpnr.RuleCondition
14106	if fpnr.Name != nil {
14107		objectMap["name"] = fpnr.Name
14108	}
14109	if fpnr.Priority != nil {
14110		objectMap["priority"] = fpnr.Priority
14111	}
14112	if fpnr.RuleType != "" {
14113		objectMap["ruleType"] = fpnr.RuleType
14114	}
14115	return json.Marshal(objectMap)
14116}
14117
14118// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14119func (fpnr FirewallPolicyNatRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14120	return &fpnr, true
14121}
14122
14123// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14124func (fpnr FirewallPolicyNatRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14125	return nil, false
14126}
14127
14128// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14129func (fpnr FirewallPolicyNatRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14130	return nil, false
14131}
14132
14133// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
14134func (fpnr FirewallPolicyNatRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14135	return &fpnr, true
14136}
14137
14138// UnmarshalJSON is the custom unmarshaler for FirewallPolicyNatRule struct.
14139func (fpnr *FirewallPolicyNatRule) UnmarshalJSON(body []byte) error {
14140	var m map[string]*json.RawMessage
14141	err := json.Unmarshal(body, &m)
14142	if err != nil {
14143		return err
14144	}
14145	for k, v := range m {
14146		switch k {
14147		case "action":
14148			if v != nil {
14149				var action FirewallPolicyNatRuleAction
14150				err = json.Unmarshal(*v, &action)
14151				if err != nil {
14152					return err
14153				}
14154				fpnr.Action = &action
14155			}
14156		case "translatedAddress":
14157			if v != nil {
14158				var translatedAddress string
14159				err = json.Unmarshal(*v, &translatedAddress)
14160				if err != nil {
14161					return err
14162				}
14163				fpnr.TranslatedAddress = &translatedAddress
14164			}
14165		case "translatedPort":
14166			if v != nil {
14167				var translatedPort string
14168				err = json.Unmarshal(*v, &translatedPort)
14169				if err != nil {
14170					return err
14171				}
14172				fpnr.TranslatedPort = &translatedPort
14173			}
14174		case "ruleCondition":
14175			if v != nil {
14176				ruleCondition, err := unmarshalBasicFirewallPolicyRuleCondition(*v)
14177				if err != nil {
14178					return err
14179				}
14180				fpnr.RuleCondition = ruleCondition
14181			}
14182		case "name":
14183			if v != nil {
14184				var name string
14185				err = json.Unmarshal(*v, &name)
14186				if err != nil {
14187					return err
14188				}
14189				fpnr.Name = &name
14190			}
14191		case "priority":
14192			if v != nil {
14193				var priority int32
14194				err = json.Unmarshal(*v, &priority)
14195				if err != nil {
14196					return err
14197				}
14198				fpnr.Priority = &priority
14199			}
14200		case "ruleType":
14201			if v != nil {
14202				var ruleType RuleType
14203				err = json.Unmarshal(*v, &ruleType)
14204				if err != nil {
14205					return err
14206				}
14207				fpnr.RuleType = ruleType
14208			}
14209		}
14210	}
14211
14212	return nil
14213}
14214
14215// FirewallPolicyNatRuleAction properties of the FirewallPolicyNatRuleAction.
14216type FirewallPolicyNatRuleAction struct {
14217	// Type - The type of action. Possible values include: 'DNAT', 'SNAT'
14218	Type FirewallPolicyNatRuleActionType `json:"type,omitempty"`
14219}
14220
14221// FirewallPolicyPropertiesFormat firewall Policy definition.
14222type FirewallPolicyPropertiesFormat struct {
14223	// RuleGroups - READ-ONLY; List of references to FirewallPolicyRuleGroups.
14224	RuleGroups *[]SubResource `json:"ruleGroups,omitempty"`
14225	// ProvisioningState - The provisioning state of the firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14226	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14227	// BasePolicy - The parent firewall policy from which rules are inherited.
14228	BasePolicy *SubResource `json:"basePolicy,omitempty"`
14229	// Firewalls - READ-ONLY; List of references to Azure Firewalls that this Firewall Policy is associated with.
14230	Firewalls *[]SubResource `json:"firewalls,omitempty"`
14231	// ChildPolicies - READ-ONLY; List of references to Child Firewall Policies.
14232	ChildPolicies *[]SubResource `json:"childPolicies,omitempty"`
14233	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
14234	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
14235}
14236
14237// BasicFirewallPolicyRule properties of the rule.
14238type BasicFirewallPolicyRule interface {
14239	AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool)
14240	AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool)
14241	AsFirewallPolicyRule() (*FirewallPolicyRule, bool)
14242}
14243
14244// FirewallPolicyRule properties of the rule.
14245type FirewallPolicyRule struct {
14246	// Name - The name of the rule.
14247	Name *string `json:"name,omitempty"`
14248	// Priority - Priority of the Firewall Policy Rule resource.
14249	Priority *int32 `json:"priority,omitempty"`
14250	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
14251	RuleType RuleType `json:"ruleType,omitempty"`
14252}
14253
14254func unmarshalBasicFirewallPolicyRule(body []byte) (BasicFirewallPolicyRule, error) {
14255	var m map[string]interface{}
14256	err := json.Unmarshal(body, &m)
14257	if err != nil {
14258		return nil, err
14259	}
14260
14261	switch m["ruleType"] {
14262	case string(RuleTypeFirewallPolicyNatRule):
14263		var fpnr FirewallPolicyNatRule
14264		err := json.Unmarshal(body, &fpnr)
14265		return fpnr, err
14266	case string(RuleTypeFirewallPolicyFilterRule):
14267		var fpfr FirewallPolicyFilterRule
14268		err := json.Unmarshal(body, &fpfr)
14269		return fpfr, err
14270	default:
14271		var fpr FirewallPolicyRule
14272		err := json.Unmarshal(body, &fpr)
14273		return fpr, err
14274	}
14275}
14276func unmarshalBasicFirewallPolicyRuleArray(body []byte) ([]BasicFirewallPolicyRule, error) {
14277	var rawMessages []*json.RawMessage
14278	err := json.Unmarshal(body, &rawMessages)
14279	if err != nil {
14280		return nil, err
14281	}
14282
14283	fprArray := make([]BasicFirewallPolicyRule, len(rawMessages))
14284
14285	for index, rawMessage := range rawMessages {
14286		fpr, err := unmarshalBasicFirewallPolicyRule(*rawMessage)
14287		if err != nil {
14288			return nil, err
14289		}
14290		fprArray[index] = fpr
14291	}
14292	return fprArray, nil
14293}
14294
14295// MarshalJSON is the custom marshaler for FirewallPolicyRule.
14296func (fpr FirewallPolicyRule) MarshalJSON() ([]byte, error) {
14297	fpr.RuleType = RuleTypeFirewallPolicyRule
14298	objectMap := make(map[string]interface{})
14299	if fpr.Name != nil {
14300		objectMap["name"] = fpr.Name
14301	}
14302	if fpr.Priority != nil {
14303		objectMap["priority"] = fpr.Priority
14304	}
14305	if fpr.RuleType != "" {
14306		objectMap["ruleType"] = fpr.RuleType
14307	}
14308	return json.Marshal(objectMap)
14309}
14310
14311// AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14312func (fpr FirewallPolicyRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
14313	return nil, false
14314}
14315
14316// AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14317func (fpr FirewallPolicyRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
14318	return nil, false
14319}
14320
14321// AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14322func (fpr FirewallPolicyRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
14323	return &fpr, true
14324}
14325
14326// AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
14327func (fpr FirewallPolicyRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
14328	return &fpr, true
14329}
14330
14331// BasicFirewallPolicyRuleCondition properties of a rule.
14332type BasicFirewallPolicyRuleCondition interface {
14333	AsApplicationRuleCondition() (*ApplicationRuleCondition, bool)
14334	AsRuleCondition() (*RuleCondition, bool)
14335	AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool)
14336}
14337
14338// FirewallPolicyRuleCondition properties of a rule.
14339type FirewallPolicyRuleCondition struct {
14340	// Name - Name of the rule condition.
14341	Name *string `json:"name,omitempty"`
14342	// Description - Description of the rule condition.
14343	Description *string `json:"description,omitempty"`
14344	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
14345	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
14346}
14347
14348func unmarshalBasicFirewallPolicyRuleCondition(body []byte) (BasicFirewallPolicyRuleCondition, error) {
14349	var m map[string]interface{}
14350	err := json.Unmarshal(body, &m)
14351	if err != nil {
14352		return nil, err
14353	}
14354
14355	switch m["ruleConditionType"] {
14356	case string(RuleConditionTypeApplicationRuleCondition):
14357		var arc ApplicationRuleCondition
14358		err := json.Unmarshal(body, &arc)
14359		return arc, err
14360	case string(RuleConditionTypeNetworkRuleCondition):
14361		var rc RuleCondition
14362		err := json.Unmarshal(body, &rc)
14363		return rc, err
14364	default:
14365		var fprc FirewallPolicyRuleCondition
14366		err := json.Unmarshal(body, &fprc)
14367		return fprc, err
14368	}
14369}
14370func unmarshalBasicFirewallPolicyRuleConditionArray(body []byte) ([]BasicFirewallPolicyRuleCondition, error) {
14371	var rawMessages []*json.RawMessage
14372	err := json.Unmarshal(body, &rawMessages)
14373	if err != nil {
14374		return nil, err
14375	}
14376
14377	fprcArray := make([]BasicFirewallPolicyRuleCondition, len(rawMessages))
14378
14379	for index, rawMessage := range rawMessages {
14380		fprc, err := unmarshalBasicFirewallPolicyRuleCondition(*rawMessage)
14381		if err != nil {
14382			return nil, err
14383		}
14384		fprcArray[index] = fprc
14385	}
14386	return fprcArray, nil
14387}
14388
14389// MarshalJSON is the custom marshaler for FirewallPolicyRuleCondition.
14390func (fprc FirewallPolicyRuleCondition) MarshalJSON() ([]byte, error) {
14391	fprc.RuleConditionType = RuleConditionTypeFirewallPolicyRuleCondition
14392	objectMap := make(map[string]interface{})
14393	if fprc.Name != nil {
14394		objectMap["name"] = fprc.Name
14395	}
14396	if fprc.Description != nil {
14397		objectMap["description"] = fprc.Description
14398	}
14399	if fprc.RuleConditionType != "" {
14400		objectMap["ruleConditionType"] = fprc.RuleConditionType
14401	}
14402	return json.Marshal(objectMap)
14403}
14404
14405// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14406func (fprc FirewallPolicyRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
14407	return nil, false
14408}
14409
14410// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14411func (fprc FirewallPolicyRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
14412	return nil, false
14413}
14414
14415// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14416func (fprc FirewallPolicyRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
14417	return &fprc, true
14418}
14419
14420// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
14421func (fprc FirewallPolicyRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
14422	return &fprc, true
14423}
14424
14425// FirewallPolicyRuleConditionApplicationProtocol properties of the application rule protocol.
14426type FirewallPolicyRuleConditionApplicationProtocol struct {
14427	// ProtocolType - Protocol type. Possible values include: 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTP', 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS'
14428	ProtocolType FirewallPolicyRuleConditionApplicationProtocolType `json:"protocolType,omitempty"`
14429	// Port - Port number for the protocol, cannot be greater than 64000.
14430	Port *int32 `json:"port,omitempty"`
14431}
14432
14433// FirewallPolicyRuleGroup rule Group resource.
14434type FirewallPolicyRuleGroup struct {
14435	autorest.Response `json:"-"`
14436	// FirewallPolicyRuleGroupProperties - The properties of the firewall policy rule group.
14437	*FirewallPolicyRuleGroupProperties `json:"properties,omitempty"`
14438	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14439	Name *string `json:"name,omitempty"`
14440	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
14441	Etag *string `json:"etag,omitempty"`
14442	// Type - READ-ONLY; Rule Group type.
14443	Type *string `json:"type,omitempty"`
14444	// ID - Resource ID.
14445	ID *string `json:"id,omitempty"`
14446}
14447
14448// MarshalJSON is the custom marshaler for FirewallPolicyRuleGroup.
14449func (fprg FirewallPolicyRuleGroup) MarshalJSON() ([]byte, error) {
14450	objectMap := make(map[string]interface{})
14451	if fprg.FirewallPolicyRuleGroupProperties != nil {
14452		objectMap["properties"] = fprg.FirewallPolicyRuleGroupProperties
14453	}
14454	if fprg.Name != nil {
14455		objectMap["name"] = fprg.Name
14456	}
14457	if fprg.ID != nil {
14458		objectMap["id"] = fprg.ID
14459	}
14460	return json.Marshal(objectMap)
14461}
14462
14463// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroup struct.
14464func (fprg *FirewallPolicyRuleGroup) UnmarshalJSON(body []byte) error {
14465	var m map[string]*json.RawMessage
14466	err := json.Unmarshal(body, &m)
14467	if err != nil {
14468		return err
14469	}
14470	for k, v := range m {
14471		switch k {
14472		case "properties":
14473			if v != nil {
14474				var firewallPolicyRuleGroupProperties FirewallPolicyRuleGroupProperties
14475				err = json.Unmarshal(*v, &firewallPolicyRuleGroupProperties)
14476				if err != nil {
14477					return err
14478				}
14479				fprg.FirewallPolicyRuleGroupProperties = &firewallPolicyRuleGroupProperties
14480			}
14481		case "name":
14482			if v != nil {
14483				var name string
14484				err = json.Unmarshal(*v, &name)
14485				if err != nil {
14486					return err
14487				}
14488				fprg.Name = &name
14489			}
14490		case "etag":
14491			if v != nil {
14492				var etag string
14493				err = json.Unmarshal(*v, &etag)
14494				if err != nil {
14495					return err
14496				}
14497				fprg.Etag = &etag
14498			}
14499		case "type":
14500			if v != nil {
14501				var typeVar string
14502				err = json.Unmarshal(*v, &typeVar)
14503				if err != nil {
14504					return err
14505				}
14506				fprg.Type = &typeVar
14507			}
14508		case "id":
14509			if v != nil {
14510				var ID string
14511				err = json.Unmarshal(*v, &ID)
14512				if err != nil {
14513					return err
14514				}
14515				fprg.ID = &ID
14516			}
14517		}
14518	}
14519
14520	return nil
14521}
14522
14523// FirewallPolicyRuleGroupListResult response for ListFirewallPolicyRuleGroups API service call.
14524type FirewallPolicyRuleGroupListResult struct {
14525	autorest.Response `json:"-"`
14526	// Value - List of FirewallPolicyRuleGroups in a FirewallPolicy.
14527	Value *[]FirewallPolicyRuleGroup `json:"value,omitempty"`
14528	// NextLink - URL to get the next set of results.
14529	NextLink *string `json:"nextLink,omitempty"`
14530}
14531
14532// FirewallPolicyRuleGroupListResultIterator provides access to a complete listing of
14533// FirewallPolicyRuleGroup values.
14534type FirewallPolicyRuleGroupListResultIterator struct {
14535	i    int
14536	page FirewallPolicyRuleGroupListResultPage
14537}
14538
14539// NextWithContext advances to the next value.  If there was an error making
14540// the request the iterator does not advance and the error is returned.
14541func (iter *FirewallPolicyRuleGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
14542	if tracing.IsEnabled() {
14543		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultIterator.NextWithContext")
14544		defer func() {
14545			sc := -1
14546			if iter.Response().Response.Response != nil {
14547				sc = iter.Response().Response.Response.StatusCode
14548			}
14549			tracing.EndSpan(ctx, sc, err)
14550		}()
14551	}
14552	iter.i++
14553	if iter.i < len(iter.page.Values()) {
14554		return nil
14555	}
14556	err = iter.page.NextWithContext(ctx)
14557	if err != nil {
14558		iter.i--
14559		return err
14560	}
14561	iter.i = 0
14562	return nil
14563}
14564
14565// Next advances to the next value.  If there was an error making
14566// the request the iterator does not advance and the error is returned.
14567// Deprecated: Use NextWithContext() instead.
14568func (iter *FirewallPolicyRuleGroupListResultIterator) Next() error {
14569	return iter.NextWithContext(context.Background())
14570}
14571
14572// NotDone returns true if the enumeration should be started or is not yet complete.
14573func (iter FirewallPolicyRuleGroupListResultIterator) NotDone() bool {
14574	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14575}
14576
14577// Response returns the raw server response from the last page request.
14578func (iter FirewallPolicyRuleGroupListResultIterator) Response() FirewallPolicyRuleGroupListResult {
14579	return iter.page.Response()
14580}
14581
14582// Value returns the current value or a zero-initialized value if the
14583// iterator has advanced beyond the end of the collection.
14584func (iter FirewallPolicyRuleGroupListResultIterator) Value() FirewallPolicyRuleGroup {
14585	if !iter.page.NotDone() {
14586		return FirewallPolicyRuleGroup{}
14587	}
14588	return iter.page.Values()[iter.i]
14589}
14590
14591// Creates a new instance of the FirewallPolicyRuleGroupListResultIterator type.
14592func NewFirewallPolicyRuleGroupListResultIterator(page FirewallPolicyRuleGroupListResultPage) FirewallPolicyRuleGroupListResultIterator {
14593	return FirewallPolicyRuleGroupListResultIterator{page: page}
14594}
14595
14596// IsEmpty returns true if the ListResult contains no values.
14597func (fprglr FirewallPolicyRuleGroupListResult) IsEmpty() bool {
14598	return fprglr.Value == nil || len(*fprglr.Value) == 0
14599}
14600
14601// firewallPolicyRuleGroupListResultPreparer prepares a request to retrieve the next set of results.
14602// It returns nil if no more results exist.
14603func (fprglr FirewallPolicyRuleGroupListResult) firewallPolicyRuleGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
14604	if fprglr.NextLink == nil || len(to.String(fprglr.NextLink)) < 1 {
14605		return nil, nil
14606	}
14607	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14608		autorest.AsJSON(),
14609		autorest.AsGet(),
14610		autorest.WithBaseURL(to.String(fprglr.NextLink)))
14611}
14612
14613// FirewallPolicyRuleGroupListResultPage contains a page of FirewallPolicyRuleGroup values.
14614type FirewallPolicyRuleGroupListResultPage struct {
14615	fn     func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)
14616	fprglr FirewallPolicyRuleGroupListResult
14617}
14618
14619// NextWithContext advances to the next page of values.  If there was an error making
14620// the request the page does not advance and the error is returned.
14621func (page *FirewallPolicyRuleGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
14622	if tracing.IsEnabled() {
14623		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultPage.NextWithContext")
14624		defer func() {
14625			sc := -1
14626			if page.Response().Response.Response != nil {
14627				sc = page.Response().Response.Response.StatusCode
14628			}
14629			tracing.EndSpan(ctx, sc, err)
14630		}()
14631	}
14632	next, err := page.fn(ctx, page.fprglr)
14633	if err != nil {
14634		return err
14635	}
14636	page.fprglr = next
14637	return nil
14638}
14639
14640// Next advances to the next page of values.  If there was an error making
14641// the request the page does not advance and the error is returned.
14642// Deprecated: Use NextWithContext() instead.
14643func (page *FirewallPolicyRuleGroupListResultPage) Next() error {
14644	return page.NextWithContext(context.Background())
14645}
14646
14647// NotDone returns true if the page enumeration should be started or is not yet complete.
14648func (page FirewallPolicyRuleGroupListResultPage) NotDone() bool {
14649	return !page.fprglr.IsEmpty()
14650}
14651
14652// Response returns the raw server response from the last page request.
14653func (page FirewallPolicyRuleGroupListResultPage) Response() FirewallPolicyRuleGroupListResult {
14654	return page.fprglr
14655}
14656
14657// Values returns the slice of values for the current page or nil if there are no values.
14658func (page FirewallPolicyRuleGroupListResultPage) Values() []FirewallPolicyRuleGroup {
14659	if page.fprglr.IsEmpty() {
14660		return nil
14661	}
14662	return *page.fprglr.Value
14663}
14664
14665// Creates a new instance of the FirewallPolicyRuleGroupListResultPage type.
14666func NewFirewallPolicyRuleGroupListResultPage(getNextPage func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)) FirewallPolicyRuleGroupListResultPage {
14667	return FirewallPolicyRuleGroupListResultPage{fn: getNextPage}
14668}
14669
14670// FirewallPolicyRuleGroupProperties properties of the rule group.
14671type FirewallPolicyRuleGroupProperties struct {
14672	// Priority - Priority of the Firewall Policy Rule Group resource.
14673	Priority *int32 `json:"priority,omitempty"`
14674	// Rules - Group of Firewall Policy rules.
14675	Rules *[]BasicFirewallPolicyRule `json:"rules,omitempty"`
14676	// ProvisioningState - The provisioning state of the firewall policy rule group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14677	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14678}
14679
14680// UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroupProperties struct.
14681func (fprgp *FirewallPolicyRuleGroupProperties) UnmarshalJSON(body []byte) error {
14682	var m map[string]*json.RawMessage
14683	err := json.Unmarshal(body, &m)
14684	if err != nil {
14685		return err
14686	}
14687	for k, v := range m {
14688		switch k {
14689		case "priority":
14690			if v != nil {
14691				var priority int32
14692				err = json.Unmarshal(*v, &priority)
14693				if err != nil {
14694					return err
14695				}
14696				fprgp.Priority = &priority
14697			}
14698		case "rules":
14699			if v != nil {
14700				rules, err := unmarshalBasicFirewallPolicyRuleArray(*v)
14701				if err != nil {
14702					return err
14703				}
14704				fprgp.Rules = &rules
14705			}
14706		case "provisioningState":
14707			if v != nil {
14708				var provisioningState ProvisioningState
14709				err = json.Unmarshal(*v, &provisioningState)
14710				if err != nil {
14711					return err
14712				}
14713				fprgp.ProvisioningState = provisioningState
14714			}
14715		}
14716	}
14717
14718	return nil
14719}
14720
14721// FirewallPolicyRuleGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
14722// a long-running operation.
14723type FirewallPolicyRuleGroupsCreateOrUpdateFuture struct {
14724	azure.Future
14725}
14726
14727// Result returns the result of the asynchronous operation.
14728// If the operation has not completed it will return an error.
14729func (future *FirewallPolicyRuleGroupsCreateOrUpdateFuture) Result(client FirewallPolicyRuleGroupsClient) (fprg FirewallPolicyRuleGroup, err error) {
14730	var done bool
14731	done, err = future.DoneWithContext(context.Background(), client)
14732	if err != nil {
14733		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14734		return
14735	}
14736	if !done {
14737		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsCreateOrUpdateFuture")
14738		return
14739	}
14740	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14741	if fprg.Response.Response, err = future.GetResult(sender); err == nil && fprg.Response.Response.StatusCode != http.StatusNoContent {
14742		fprg, err = client.CreateOrUpdateResponder(fprg.Response.Response)
14743		if err != nil {
14744			err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", fprg.Response.Response, "Failure responding to request")
14745		}
14746	}
14747	return
14748}
14749
14750// FirewallPolicyRuleGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
14751// long-running operation.
14752type FirewallPolicyRuleGroupsDeleteFuture struct {
14753	azure.Future
14754}
14755
14756// Result returns the result of the asynchronous operation.
14757// If the operation has not completed it will return an error.
14758func (future *FirewallPolicyRuleGroupsDeleteFuture) Result(client FirewallPolicyRuleGroupsClient) (ar autorest.Response, err error) {
14759	var done bool
14760	done, err = future.DoneWithContext(context.Background(), client)
14761	if err != nil {
14762		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
14763		return
14764	}
14765	if !done {
14766		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsDeleteFuture")
14767		return
14768	}
14769	ar.Response = future.Response()
14770	return
14771}
14772
14773// FlowLogFormatParameters parameters that define the flow log format.
14774type FlowLogFormatParameters struct {
14775	// Type - The file type of flow log. Possible values include: 'JSON'
14776	Type FlowLogFormatType `json:"type,omitempty"`
14777	// Version - The version (revision) of the flow log.
14778	Version *int32 `json:"version,omitempty"`
14779}
14780
14781// FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
14782type FlowLogInformation struct {
14783	autorest.Response `json:"-"`
14784	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
14785	TargetResourceID *string `json:"targetResourceId,omitempty"`
14786	// FlowLogProperties - Properties of the flow log.
14787	*FlowLogProperties `json:"properties,omitempty"`
14788	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
14789	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
14790}
14791
14792// MarshalJSON is the custom marshaler for FlowLogInformation.
14793func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
14794	objectMap := make(map[string]interface{})
14795	if fli.TargetResourceID != nil {
14796		objectMap["targetResourceId"] = fli.TargetResourceID
14797	}
14798	if fli.FlowLogProperties != nil {
14799		objectMap["properties"] = fli.FlowLogProperties
14800	}
14801	if fli.FlowAnalyticsConfiguration != nil {
14802		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
14803	}
14804	return json.Marshal(objectMap)
14805}
14806
14807// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
14808func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
14809	var m map[string]*json.RawMessage
14810	err := json.Unmarshal(body, &m)
14811	if err != nil {
14812		return err
14813	}
14814	for k, v := range m {
14815		switch k {
14816		case "targetResourceId":
14817			if v != nil {
14818				var targetResourceID string
14819				err = json.Unmarshal(*v, &targetResourceID)
14820				if err != nil {
14821					return err
14822				}
14823				fli.TargetResourceID = &targetResourceID
14824			}
14825		case "properties":
14826			if v != nil {
14827				var flowLogProperties FlowLogProperties
14828				err = json.Unmarshal(*v, &flowLogProperties)
14829				if err != nil {
14830					return err
14831				}
14832				fli.FlowLogProperties = &flowLogProperties
14833			}
14834		case "flowAnalyticsConfiguration":
14835			if v != nil {
14836				var flowAnalyticsConfiguration TrafficAnalyticsProperties
14837				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
14838				if err != nil {
14839					return err
14840				}
14841				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
14842			}
14843		}
14844	}
14845
14846	return nil
14847}
14848
14849// FlowLogProperties parameters that define the configuration of flow log.
14850type FlowLogProperties struct {
14851	// StorageID - ID of the storage account which is used to store the flow log.
14852	StorageID *string `json:"storageId,omitempty"`
14853	// Enabled - Flag to enable/disable flow logging.
14854	Enabled *bool `json:"enabled,omitempty"`
14855	// RetentionPolicy - Parameters that define the retention policy for flow log.
14856	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
14857	// Format - Parameters that define the flow log format.
14858	Format *FlowLogFormatParameters `json:"format,omitempty"`
14859}
14860
14861// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
14862// (optional) status.
14863type FlowLogStatusParameters struct {
14864	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
14865	TargetResourceID *string `json:"targetResourceId,omitempty"`
14866}
14867
14868// FrontendIPConfiguration frontend IP address of the load balancer.
14869type FrontendIPConfiguration struct {
14870	autorest.Response `json:"-"`
14871	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
14872	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
14873	// 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.
14874	Name *string `json:"name,omitempty"`
14875	// Etag - A unique read-only string that changes whenever the resource is updated.
14876	Etag *string `json:"etag,omitempty"`
14877	// Type - READ-ONLY; Type of the resource.
14878	Type *string `json:"type,omitempty"`
14879	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
14880	Zones *[]string `json:"zones,omitempty"`
14881	// ID - Resource ID.
14882	ID *string `json:"id,omitempty"`
14883}
14884
14885// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
14886func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
14887	objectMap := make(map[string]interface{})
14888	if fic.FrontendIPConfigurationPropertiesFormat != nil {
14889		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
14890	}
14891	if fic.Name != nil {
14892		objectMap["name"] = fic.Name
14893	}
14894	if fic.Etag != nil {
14895		objectMap["etag"] = fic.Etag
14896	}
14897	if fic.Zones != nil {
14898		objectMap["zones"] = fic.Zones
14899	}
14900	if fic.ID != nil {
14901		objectMap["id"] = fic.ID
14902	}
14903	return json.Marshal(objectMap)
14904}
14905
14906// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
14907func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
14908	var m map[string]*json.RawMessage
14909	err := json.Unmarshal(body, &m)
14910	if err != nil {
14911		return err
14912	}
14913	for k, v := range m {
14914		switch k {
14915		case "properties":
14916			if v != nil {
14917				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
14918				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
14919				if err != nil {
14920					return err
14921				}
14922				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
14923			}
14924		case "name":
14925			if v != nil {
14926				var name string
14927				err = json.Unmarshal(*v, &name)
14928				if err != nil {
14929					return err
14930				}
14931				fic.Name = &name
14932			}
14933		case "etag":
14934			if v != nil {
14935				var etag string
14936				err = json.Unmarshal(*v, &etag)
14937				if err != nil {
14938					return err
14939				}
14940				fic.Etag = &etag
14941			}
14942		case "type":
14943			if v != nil {
14944				var typeVar string
14945				err = json.Unmarshal(*v, &typeVar)
14946				if err != nil {
14947					return err
14948				}
14949				fic.Type = &typeVar
14950			}
14951		case "zones":
14952			if v != nil {
14953				var zones []string
14954				err = json.Unmarshal(*v, &zones)
14955				if err != nil {
14956					return err
14957				}
14958				fic.Zones = &zones
14959			}
14960		case "id":
14961			if v != nil {
14962				var ID string
14963				err = json.Unmarshal(*v, &ID)
14964				if err != nil {
14965					return err
14966				}
14967				fic.ID = &ID
14968			}
14969		}
14970	}
14971
14972	return nil
14973}
14974
14975// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
14976type FrontendIPConfigurationPropertiesFormat struct {
14977	// InboundNatRules - READ-ONLY; An array of references to inbound rules that use this frontend IP.
14978	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
14979	// InboundNatPools - READ-ONLY; An array of references to inbound pools that use this frontend IP.
14980	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
14981	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this frontend IP.
14982	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
14983	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this frontend IP.
14984	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
14985	// PrivateIPAddress - The private IP address of the IP configuration.
14986	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
14987	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
14988	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
14989	// PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
14990	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
14991	// Subnet - The reference of the subnet resource.
14992	Subnet *Subnet `json:"subnet,omitempty"`
14993	// PublicIPAddress - The reference of the Public IP resource.
14994	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
14995	// PublicIPPrefix - The reference of the Public IP Prefix resource.
14996	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
14997	// ProvisioningState - The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
14998	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14999}
15000
15001// GatewayRoute gateway routing details.
15002type GatewayRoute struct {
15003	// LocalAddress - READ-ONLY; The gateway's local address.
15004	LocalAddress *string `json:"localAddress,omitempty"`
15005	// NetworkProperty - READ-ONLY; The route's network prefix.
15006	NetworkProperty *string `json:"network,omitempty"`
15007	// NextHop - READ-ONLY; The route's next hop.
15008	NextHop *string `json:"nextHop,omitempty"`
15009	// SourcePeer - READ-ONLY; The peer this route was learned from.
15010	SourcePeer *string `json:"sourcePeer,omitempty"`
15011	// Origin - READ-ONLY; The source this route was learned from.
15012	Origin *string `json:"origin,omitempty"`
15013	// AsPath - READ-ONLY; The route's AS path sequence.
15014	AsPath *string `json:"asPath,omitempty"`
15015	// Weight - READ-ONLY; The route's weight.
15016	Weight *int32 `json:"weight,omitempty"`
15017}
15018
15019// GatewayRouteListResult list of virtual network gateway routes.
15020type GatewayRouteListResult struct {
15021	autorest.Response `json:"-"`
15022	// Value - List of gateway routes.
15023	Value *[]GatewayRoute `json:"value,omitempty"`
15024}
15025
15026// GetVpnSitesConfigurationRequest list of Vpn-Sites.
15027type GetVpnSitesConfigurationRequest struct {
15028	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
15029	VpnSites *[]string `json:"vpnSites,omitempty"`
15030	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites.
15031	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
15032}
15033
15034// HTTPConfiguration HTTP configuration of the connectivity check.
15035type HTTPConfiguration struct {
15036	// Method - HTTP method. Possible values include: 'Get'
15037	Method HTTPMethod `json:"method,omitempty"`
15038	// Headers - List of HTTP headers.
15039	Headers *[]HTTPHeader `json:"headers,omitempty"`
15040	// ValidStatusCodes - Valid status codes.
15041	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
15042}
15043
15044// HTTPHeader describes the HTTP header.
15045type HTTPHeader struct {
15046	// Name - The name in HTTP header.
15047	Name *string `json:"name,omitempty"`
15048	// Value - The value in HTTP header.
15049	Value *string `json:"value,omitempty"`
15050}
15051
15052// HubIPAddresses IP addresses associated with azure firewall.
15053type HubIPAddresses struct {
15054	// PublicIPAddresses - List of Public IP addresses associated with azure firewall.
15055	PublicIPAddresses *[]AzureFirewallPublicIPAddress `json:"publicIPAddresses,omitempty"`
15056	// PrivateIPAddress - Private IP Address associated with azure firewall.
15057	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
15058}
15059
15060// HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
15061type HubVirtualNetworkConnection struct {
15062	autorest.Response `json:"-"`
15063	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
15064	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
15065	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15066	Name *string `json:"name,omitempty"`
15067	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
15068	Etag *string `json:"etag,omitempty"`
15069	// ID - Resource ID.
15070	ID *string `json:"id,omitempty"`
15071}
15072
15073// MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
15074func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
15075	objectMap := make(map[string]interface{})
15076	if hvnc.HubVirtualNetworkConnectionProperties != nil {
15077		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
15078	}
15079	if hvnc.Name != nil {
15080		objectMap["name"] = hvnc.Name
15081	}
15082	if hvnc.ID != nil {
15083		objectMap["id"] = hvnc.ID
15084	}
15085	return json.Marshal(objectMap)
15086}
15087
15088// UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
15089func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
15090	var m map[string]*json.RawMessage
15091	err := json.Unmarshal(body, &m)
15092	if err != nil {
15093		return err
15094	}
15095	for k, v := range m {
15096		switch k {
15097		case "properties":
15098			if v != nil {
15099				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
15100				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
15101				if err != nil {
15102					return err
15103				}
15104				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
15105			}
15106		case "name":
15107			if v != nil {
15108				var name string
15109				err = json.Unmarshal(*v, &name)
15110				if err != nil {
15111					return err
15112				}
15113				hvnc.Name = &name
15114			}
15115		case "etag":
15116			if v != nil {
15117				var etag string
15118				err = json.Unmarshal(*v, &etag)
15119				if err != nil {
15120					return err
15121				}
15122				hvnc.Etag = &etag
15123			}
15124		case "id":
15125			if v != nil {
15126				var ID string
15127				err = json.Unmarshal(*v, &ID)
15128				if err != nil {
15129					return err
15130				}
15131				hvnc.ID = &ID
15132			}
15133		}
15134	}
15135
15136	return nil
15137}
15138
15139// HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection.
15140type HubVirtualNetworkConnectionProperties struct {
15141	// RemoteVirtualNetwork - Reference to the remote virtual network.
15142	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
15143	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
15144	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
15145	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
15146	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
15147	// EnableInternetSecurity - Enable internet security.
15148	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
15149	// ProvisioningState - The provisioning state of the hub virtual network connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15150	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15151}
15152
15153// InboundNatPool inbound NAT pool of the load balancer.
15154type InboundNatPool struct {
15155	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
15156	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
15157	// 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.
15158	Name *string `json:"name,omitempty"`
15159	// Etag - A unique read-only string that changes whenever the resource is updated.
15160	Etag *string `json:"etag,omitempty"`
15161	// Type - READ-ONLY; Type of the resource.
15162	Type *string `json:"type,omitempty"`
15163	// ID - Resource ID.
15164	ID *string `json:"id,omitempty"`
15165}
15166
15167// MarshalJSON is the custom marshaler for InboundNatPool.
15168func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
15169	objectMap := make(map[string]interface{})
15170	if inp.InboundNatPoolPropertiesFormat != nil {
15171		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
15172	}
15173	if inp.Name != nil {
15174		objectMap["name"] = inp.Name
15175	}
15176	if inp.Etag != nil {
15177		objectMap["etag"] = inp.Etag
15178	}
15179	if inp.ID != nil {
15180		objectMap["id"] = inp.ID
15181	}
15182	return json.Marshal(objectMap)
15183}
15184
15185// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
15186func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
15187	var m map[string]*json.RawMessage
15188	err := json.Unmarshal(body, &m)
15189	if err != nil {
15190		return err
15191	}
15192	for k, v := range m {
15193		switch k {
15194		case "properties":
15195			if v != nil {
15196				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
15197				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
15198				if err != nil {
15199					return err
15200				}
15201				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
15202			}
15203		case "name":
15204			if v != nil {
15205				var name string
15206				err = json.Unmarshal(*v, &name)
15207				if err != nil {
15208					return err
15209				}
15210				inp.Name = &name
15211			}
15212		case "etag":
15213			if v != nil {
15214				var etag string
15215				err = json.Unmarshal(*v, &etag)
15216				if err != nil {
15217					return err
15218				}
15219				inp.Etag = &etag
15220			}
15221		case "type":
15222			if v != nil {
15223				var typeVar string
15224				err = json.Unmarshal(*v, &typeVar)
15225				if err != nil {
15226					return err
15227				}
15228				inp.Type = &typeVar
15229			}
15230		case "id":
15231			if v != nil {
15232				var ID string
15233				err = json.Unmarshal(*v, &ID)
15234				if err != nil {
15235					return err
15236				}
15237				inp.ID = &ID
15238			}
15239		}
15240	}
15241
15242	return nil
15243}
15244
15245// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
15246type InboundNatPoolPropertiesFormat struct {
15247	// FrontendIPConfiguration - A reference to frontend IP addresses.
15248	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
15249	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
15250	Protocol TransportProtocol `json:"protocol,omitempty"`
15251	// 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.
15252	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
15253	// 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.
15254	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
15255	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
15256	BackendPort *int32 `json:"backendPort,omitempty"`
15257	// 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.
15258	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
15259	// 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.
15260	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
15261	// 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.
15262	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
15263	// ProvisioningState - The provisioning state of the inbound NAT pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15264	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15265}
15266
15267// InboundNatRule inbound NAT rule of the load balancer.
15268type InboundNatRule struct {
15269	autorest.Response `json:"-"`
15270	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
15271	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
15272	// 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.
15273	Name *string `json:"name,omitempty"`
15274	// Etag - A unique read-only string that changes whenever the resource is updated.
15275	Etag *string `json:"etag,omitempty"`
15276	// Type - READ-ONLY; Type of the resource.
15277	Type *string `json:"type,omitempty"`
15278	// ID - Resource ID.
15279	ID *string `json:"id,omitempty"`
15280}
15281
15282// MarshalJSON is the custom marshaler for InboundNatRule.
15283func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
15284	objectMap := make(map[string]interface{})
15285	if inr.InboundNatRulePropertiesFormat != nil {
15286		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
15287	}
15288	if inr.Name != nil {
15289		objectMap["name"] = inr.Name
15290	}
15291	if inr.Etag != nil {
15292		objectMap["etag"] = inr.Etag
15293	}
15294	if inr.ID != nil {
15295		objectMap["id"] = inr.ID
15296	}
15297	return json.Marshal(objectMap)
15298}
15299
15300// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
15301func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
15302	var m map[string]*json.RawMessage
15303	err := json.Unmarshal(body, &m)
15304	if err != nil {
15305		return err
15306	}
15307	for k, v := range m {
15308		switch k {
15309		case "properties":
15310			if v != nil {
15311				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
15312				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
15313				if err != nil {
15314					return err
15315				}
15316				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
15317			}
15318		case "name":
15319			if v != nil {
15320				var name string
15321				err = json.Unmarshal(*v, &name)
15322				if err != nil {
15323					return err
15324				}
15325				inr.Name = &name
15326			}
15327		case "etag":
15328			if v != nil {
15329				var etag string
15330				err = json.Unmarshal(*v, &etag)
15331				if err != nil {
15332					return err
15333				}
15334				inr.Etag = &etag
15335			}
15336		case "type":
15337			if v != nil {
15338				var typeVar string
15339				err = json.Unmarshal(*v, &typeVar)
15340				if err != nil {
15341					return err
15342				}
15343				inr.Type = &typeVar
15344			}
15345		case "id":
15346			if v != nil {
15347				var ID string
15348				err = json.Unmarshal(*v, &ID)
15349				if err != nil {
15350					return err
15351				}
15352				inr.ID = &ID
15353			}
15354		}
15355	}
15356
15357	return nil
15358}
15359
15360// InboundNatRuleListResult response for ListInboundNatRule API service call.
15361type InboundNatRuleListResult struct {
15362	autorest.Response `json:"-"`
15363	// Value - A list of inbound nat rules in a load balancer.
15364	Value *[]InboundNatRule `json:"value,omitempty"`
15365	// NextLink - READ-ONLY; The URL to get the next set of results.
15366	NextLink *string `json:"nextLink,omitempty"`
15367}
15368
15369// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
15370type InboundNatRuleListResultIterator struct {
15371	i    int
15372	page InboundNatRuleListResultPage
15373}
15374
15375// NextWithContext advances to the next value.  If there was an error making
15376// the request the iterator does not advance and the error is returned.
15377func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
15378	if tracing.IsEnabled() {
15379		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
15380		defer func() {
15381			sc := -1
15382			if iter.Response().Response.Response != nil {
15383				sc = iter.Response().Response.Response.StatusCode
15384			}
15385			tracing.EndSpan(ctx, sc, err)
15386		}()
15387	}
15388	iter.i++
15389	if iter.i < len(iter.page.Values()) {
15390		return nil
15391	}
15392	err = iter.page.NextWithContext(ctx)
15393	if err != nil {
15394		iter.i--
15395		return err
15396	}
15397	iter.i = 0
15398	return nil
15399}
15400
15401// Next advances to the next value.  If there was an error making
15402// the request the iterator does not advance and the error is returned.
15403// Deprecated: Use NextWithContext() instead.
15404func (iter *InboundNatRuleListResultIterator) Next() error {
15405	return iter.NextWithContext(context.Background())
15406}
15407
15408// NotDone returns true if the enumeration should be started or is not yet complete.
15409func (iter InboundNatRuleListResultIterator) NotDone() bool {
15410	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15411}
15412
15413// Response returns the raw server response from the last page request.
15414func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
15415	return iter.page.Response()
15416}
15417
15418// Value returns the current value or a zero-initialized value if the
15419// iterator has advanced beyond the end of the collection.
15420func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
15421	if !iter.page.NotDone() {
15422		return InboundNatRule{}
15423	}
15424	return iter.page.Values()[iter.i]
15425}
15426
15427// Creates a new instance of the InboundNatRuleListResultIterator type.
15428func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
15429	return InboundNatRuleListResultIterator{page: page}
15430}
15431
15432// IsEmpty returns true if the ListResult contains no values.
15433func (inrlr InboundNatRuleListResult) IsEmpty() bool {
15434	return inrlr.Value == nil || len(*inrlr.Value) == 0
15435}
15436
15437// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
15438// It returns nil if no more results exist.
15439func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
15440	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
15441		return nil, nil
15442	}
15443	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15444		autorest.AsJSON(),
15445		autorest.AsGet(),
15446		autorest.WithBaseURL(to.String(inrlr.NextLink)))
15447}
15448
15449// InboundNatRuleListResultPage contains a page of InboundNatRule values.
15450type InboundNatRuleListResultPage struct {
15451	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
15452	inrlr InboundNatRuleListResult
15453}
15454
15455// NextWithContext advances to the next page of values.  If there was an error making
15456// the request the page does not advance and the error is returned.
15457func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
15458	if tracing.IsEnabled() {
15459		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
15460		defer func() {
15461			sc := -1
15462			if page.Response().Response.Response != nil {
15463				sc = page.Response().Response.Response.StatusCode
15464			}
15465			tracing.EndSpan(ctx, sc, err)
15466		}()
15467	}
15468	next, err := page.fn(ctx, page.inrlr)
15469	if err != nil {
15470		return err
15471	}
15472	page.inrlr = next
15473	return nil
15474}
15475
15476// Next advances to the next page of values.  If there was an error making
15477// the request the page does not advance and the error is returned.
15478// Deprecated: Use NextWithContext() instead.
15479func (page *InboundNatRuleListResultPage) Next() error {
15480	return page.NextWithContext(context.Background())
15481}
15482
15483// NotDone returns true if the page enumeration should be started or is not yet complete.
15484func (page InboundNatRuleListResultPage) NotDone() bool {
15485	return !page.inrlr.IsEmpty()
15486}
15487
15488// Response returns the raw server response from the last page request.
15489func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
15490	return page.inrlr
15491}
15492
15493// Values returns the slice of values for the current page or nil if there are no values.
15494func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
15495	if page.inrlr.IsEmpty() {
15496		return nil
15497	}
15498	return *page.inrlr.Value
15499}
15500
15501// Creates a new instance of the InboundNatRuleListResultPage type.
15502func NewInboundNatRuleListResultPage(getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
15503	return InboundNatRuleListResultPage{fn: getNextPage}
15504}
15505
15506// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
15507type InboundNatRulePropertiesFormat struct {
15508	// FrontendIPConfiguration - A reference to frontend IP addresses.
15509	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
15510	// 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.
15511	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
15512	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
15513	Protocol TransportProtocol `json:"protocol,omitempty"`
15514	// 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.
15515	FrontendPort *int32 `json:"frontendPort,omitempty"`
15516	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
15517	BackendPort *int32 `json:"backendPort,omitempty"`
15518	// 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.
15519	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
15520	// 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.
15521	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
15522	// 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.
15523	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
15524	// ProvisioningState - The provisioning state of the inbound NAT rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15525	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15526}
15527
15528// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
15529// long-running operation.
15530type InboundNatRulesCreateOrUpdateFuture struct {
15531	azure.Future
15532}
15533
15534// Result returns the result of the asynchronous operation.
15535// If the operation has not completed it will return an error.
15536func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
15537	var done bool
15538	done, err = future.DoneWithContext(context.Background(), client)
15539	if err != nil {
15540		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15541		return
15542	}
15543	if !done {
15544		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
15545		return
15546	}
15547	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15548	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
15549		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
15550		if err != nil {
15551			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
15552		}
15553	}
15554	return
15555}
15556
15557// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
15558// operation.
15559type InboundNatRulesDeleteFuture struct {
15560	azure.Future
15561}
15562
15563// Result returns the result of the asynchronous operation.
15564// If the operation has not completed it will return an error.
15565func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
15566	var done bool
15567	done, err = future.DoneWithContext(context.Background(), client)
15568	if err != nil {
15569		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
15570		return
15571	}
15572	if !done {
15573		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
15574		return
15575	}
15576	ar.Response = future.Response()
15577	return
15578}
15579
15580// IntentPolicy network Intent Policy resource.
15581type IntentPolicy struct {
15582	// Etag - A unique read-only string that changes whenever the resource is updated.
15583	Etag *string `json:"etag,omitempty"`
15584	// ID - Resource ID.
15585	ID *string `json:"id,omitempty"`
15586	// Name - READ-ONLY; Resource name.
15587	Name *string `json:"name,omitempty"`
15588	// Type - READ-ONLY; Resource type.
15589	Type *string `json:"type,omitempty"`
15590	// Location - Resource location.
15591	Location *string `json:"location,omitempty"`
15592	// Tags - Resource tags.
15593	Tags map[string]*string `json:"tags"`
15594}
15595
15596// MarshalJSON is the custom marshaler for IntentPolicy.
15597func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
15598	objectMap := make(map[string]interface{})
15599	if IP.Etag != nil {
15600		objectMap["etag"] = IP.Etag
15601	}
15602	if IP.ID != nil {
15603		objectMap["id"] = IP.ID
15604	}
15605	if IP.Location != nil {
15606		objectMap["location"] = IP.Location
15607	}
15608	if IP.Tags != nil {
15609		objectMap["tags"] = IP.Tags
15610	}
15611	return json.Marshal(objectMap)
15612}
15613
15614// IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
15615type IntentPolicyConfiguration struct {
15616	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
15617	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
15618	// SourceNetworkIntentPolicy - Source network intent policy.
15619	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
15620}
15621
15622// Interface a network interface in a resource group.
15623type Interface struct {
15624	autorest.Response `json:"-"`
15625	// InterfacePropertiesFormat - Properties of the network interface.
15626	*InterfacePropertiesFormat `json:"properties,omitempty"`
15627	// Etag - A unique read-only string that changes whenever the resource is updated.
15628	Etag *string `json:"etag,omitempty"`
15629	// ID - Resource ID.
15630	ID *string `json:"id,omitempty"`
15631	// Name - READ-ONLY; Resource name.
15632	Name *string `json:"name,omitempty"`
15633	// Type - READ-ONLY; Resource type.
15634	Type *string `json:"type,omitempty"`
15635	// Location - Resource location.
15636	Location *string `json:"location,omitempty"`
15637	// Tags - Resource tags.
15638	Tags map[string]*string `json:"tags"`
15639}
15640
15641// MarshalJSON is the custom marshaler for Interface.
15642func (i Interface) MarshalJSON() ([]byte, error) {
15643	objectMap := make(map[string]interface{})
15644	if i.InterfacePropertiesFormat != nil {
15645		objectMap["properties"] = i.InterfacePropertiesFormat
15646	}
15647	if i.Etag != nil {
15648		objectMap["etag"] = i.Etag
15649	}
15650	if i.ID != nil {
15651		objectMap["id"] = i.ID
15652	}
15653	if i.Location != nil {
15654		objectMap["location"] = i.Location
15655	}
15656	if i.Tags != nil {
15657		objectMap["tags"] = i.Tags
15658	}
15659	return json.Marshal(objectMap)
15660}
15661
15662// UnmarshalJSON is the custom unmarshaler for Interface struct.
15663func (i *Interface) UnmarshalJSON(body []byte) error {
15664	var m map[string]*json.RawMessage
15665	err := json.Unmarshal(body, &m)
15666	if err != nil {
15667		return err
15668	}
15669	for k, v := range m {
15670		switch k {
15671		case "properties":
15672			if v != nil {
15673				var interfacePropertiesFormat InterfacePropertiesFormat
15674				err = json.Unmarshal(*v, &interfacePropertiesFormat)
15675				if err != nil {
15676					return err
15677				}
15678				i.InterfacePropertiesFormat = &interfacePropertiesFormat
15679			}
15680		case "etag":
15681			if v != nil {
15682				var etag string
15683				err = json.Unmarshal(*v, &etag)
15684				if err != nil {
15685					return err
15686				}
15687				i.Etag = &etag
15688			}
15689		case "id":
15690			if v != nil {
15691				var ID string
15692				err = json.Unmarshal(*v, &ID)
15693				if err != nil {
15694					return err
15695				}
15696				i.ID = &ID
15697			}
15698		case "name":
15699			if v != nil {
15700				var name string
15701				err = json.Unmarshal(*v, &name)
15702				if err != nil {
15703					return err
15704				}
15705				i.Name = &name
15706			}
15707		case "type":
15708			if v != nil {
15709				var typeVar string
15710				err = json.Unmarshal(*v, &typeVar)
15711				if err != nil {
15712					return err
15713				}
15714				i.Type = &typeVar
15715			}
15716		case "location":
15717			if v != nil {
15718				var location string
15719				err = json.Unmarshal(*v, &location)
15720				if err != nil {
15721					return err
15722				}
15723				i.Location = &location
15724			}
15725		case "tags":
15726			if v != nil {
15727				var tags map[string]*string
15728				err = json.Unmarshal(*v, &tags)
15729				if err != nil {
15730					return err
15731				}
15732				i.Tags = tags
15733			}
15734		}
15735	}
15736
15737	return nil
15738}
15739
15740// InterfaceAssociation network interface and its custom security rules.
15741type InterfaceAssociation struct {
15742	// ID - READ-ONLY; Network interface ID.
15743	ID *string `json:"id,omitempty"`
15744	// SecurityRules - Collection of custom security rules.
15745	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
15746}
15747
15748// InterfaceDNSSettings DNS settings of a network interface.
15749type InterfaceDNSSettings struct {
15750	// 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.
15751	DNSServers *[]string `json:"dnsServers,omitempty"`
15752	// AppliedDNSServers - 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.
15753	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
15754	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
15755	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
15756	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
15757	InternalFqdn *string `json:"internalFqdn,omitempty"`
15758	// InternalDomainNameSuffix - 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.
15759	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
15760}
15761
15762// InterfaceIPConfiguration iPConfiguration in a network interface.
15763type InterfaceIPConfiguration struct {
15764	autorest.Response `json:"-"`
15765	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
15766	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
15767	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15768	Name *string `json:"name,omitempty"`
15769	// Etag - A unique read-only string that changes whenever the resource is updated.
15770	Etag *string `json:"etag,omitempty"`
15771	// ID - Resource ID.
15772	ID *string `json:"id,omitempty"`
15773}
15774
15775// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
15776func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
15777	objectMap := make(map[string]interface{})
15778	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
15779		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
15780	}
15781	if iic.Name != nil {
15782		objectMap["name"] = iic.Name
15783	}
15784	if iic.Etag != nil {
15785		objectMap["etag"] = iic.Etag
15786	}
15787	if iic.ID != nil {
15788		objectMap["id"] = iic.ID
15789	}
15790	return json.Marshal(objectMap)
15791}
15792
15793// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
15794func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
15795	var m map[string]*json.RawMessage
15796	err := json.Unmarshal(body, &m)
15797	if err != nil {
15798		return err
15799	}
15800	for k, v := range m {
15801		switch k {
15802		case "properties":
15803			if v != nil {
15804				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
15805				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
15806				if err != nil {
15807					return err
15808				}
15809				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
15810			}
15811		case "name":
15812			if v != nil {
15813				var name string
15814				err = json.Unmarshal(*v, &name)
15815				if err != nil {
15816					return err
15817				}
15818				iic.Name = &name
15819			}
15820		case "etag":
15821			if v != nil {
15822				var etag string
15823				err = json.Unmarshal(*v, &etag)
15824				if err != nil {
15825					return err
15826				}
15827				iic.Etag = &etag
15828			}
15829		case "id":
15830			if v != nil {
15831				var ID string
15832				err = json.Unmarshal(*v, &ID)
15833				if err != nil {
15834					return err
15835				}
15836				iic.ID = &ID
15837			}
15838		}
15839	}
15840
15841	return nil
15842}
15843
15844// InterfaceIPConfigurationListResult response for list ip configurations API service call.
15845type InterfaceIPConfigurationListResult struct {
15846	autorest.Response `json:"-"`
15847	// Value - A list of ip configurations.
15848	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
15849	// NextLink - READ-ONLY; The URL to get the next set of results.
15850	NextLink *string `json:"nextLink,omitempty"`
15851}
15852
15853// InterfaceIPConfigurationListResultIterator provides access to a complete listing of
15854// InterfaceIPConfiguration values.
15855type InterfaceIPConfigurationListResultIterator struct {
15856	i    int
15857	page InterfaceIPConfigurationListResultPage
15858}
15859
15860// NextWithContext advances to the next value.  If there was an error making
15861// the request the iterator does not advance and the error is returned.
15862func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
15863	if tracing.IsEnabled() {
15864		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
15865		defer func() {
15866			sc := -1
15867			if iter.Response().Response.Response != nil {
15868				sc = iter.Response().Response.Response.StatusCode
15869			}
15870			tracing.EndSpan(ctx, sc, err)
15871		}()
15872	}
15873	iter.i++
15874	if iter.i < len(iter.page.Values()) {
15875		return nil
15876	}
15877	err = iter.page.NextWithContext(ctx)
15878	if err != nil {
15879		iter.i--
15880		return err
15881	}
15882	iter.i = 0
15883	return nil
15884}
15885
15886// Next advances to the next value.  If there was an error making
15887// the request the iterator does not advance and the error is returned.
15888// Deprecated: Use NextWithContext() instead.
15889func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
15890	return iter.NextWithContext(context.Background())
15891}
15892
15893// NotDone returns true if the enumeration should be started or is not yet complete.
15894func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
15895	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15896}
15897
15898// Response returns the raw server response from the last page request.
15899func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
15900	return iter.page.Response()
15901}
15902
15903// Value returns the current value or a zero-initialized value if the
15904// iterator has advanced beyond the end of the collection.
15905func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
15906	if !iter.page.NotDone() {
15907		return InterfaceIPConfiguration{}
15908	}
15909	return iter.page.Values()[iter.i]
15910}
15911
15912// Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
15913func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
15914	return InterfaceIPConfigurationListResultIterator{page: page}
15915}
15916
15917// IsEmpty returns true if the ListResult contains no values.
15918func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
15919	return iiclr.Value == nil || len(*iiclr.Value) == 0
15920}
15921
15922// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
15923// It returns nil if no more results exist.
15924func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
15925	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
15926		return nil, nil
15927	}
15928	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15929		autorest.AsJSON(),
15930		autorest.AsGet(),
15931		autorest.WithBaseURL(to.String(iiclr.NextLink)))
15932}
15933
15934// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
15935type InterfaceIPConfigurationListResultPage struct {
15936	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
15937	iiclr InterfaceIPConfigurationListResult
15938}
15939
15940// NextWithContext advances to the next page of values.  If there was an error making
15941// the request the page does not advance and the error is returned.
15942func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
15943	if tracing.IsEnabled() {
15944		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
15945		defer func() {
15946			sc := -1
15947			if page.Response().Response.Response != nil {
15948				sc = page.Response().Response.Response.StatusCode
15949			}
15950			tracing.EndSpan(ctx, sc, err)
15951		}()
15952	}
15953	next, err := page.fn(ctx, page.iiclr)
15954	if err != nil {
15955		return err
15956	}
15957	page.iiclr = next
15958	return nil
15959}
15960
15961// Next advances to the next page of values.  If there was an error making
15962// the request the page does not advance and the error is returned.
15963// Deprecated: Use NextWithContext() instead.
15964func (page *InterfaceIPConfigurationListResultPage) Next() error {
15965	return page.NextWithContext(context.Background())
15966}
15967
15968// NotDone returns true if the page enumeration should be started or is not yet complete.
15969func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
15970	return !page.iiclr.IsEmpty()
15971}
15972
15973// Response returns the raw server response from the last page request.
15974func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
15975	return page.iiclr
15976}
15977
15978// Values returns the slice of values for the current page or nil if there are no values.
15979func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
15980	if page.iiclr.IsEmpty() {
15981		return nil
15982	}
15983	return *page.iiclr.Value
15984}
15985
15986// Creates a new instance of the InterfaceIPConfigurationListResultPage type.
15987func NewInterfaceIPConfigurationListResultPage(getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
15988	return InterfaceIPConfigurationListResultPage{fn: getNextPage}
15989}
15990
15991// InterfaceIPConfigurationPrivateLinkConnectionProperties privateLinkConnection properties for the network
15992// interface.
15993type InterfaceIPConfigurationPrivateLinkConnectionProperties struct {
15994	// GroupID - READ-ONLY; The group ID for current private link connection.
15995	GroupID *string `json:"groupId,omitempty"`
15996	// RequiredMemberName - READ-ONLY; The required member name for current private link connection.
15997	RequiredMemberName *string `json:"requiredMemberName,omitempty"`
15998	// Fqdns - READ-ONLY; List of FQDNs for current private link connection.
15999	Fqdns *[]string `json:"fqdns,omitempty"`
16000}
16001
16002// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
16003type InterfaceIPConfigurationPropertiesFormat struct {
16004	// VirtualNetworkTaps - The reference to Virtual Network Taps.
16005	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
16006	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
16007	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
16008	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
16009	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
16010	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
16011	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
16012	// PrivateIPAddress - Private IP address of the IP configuration.
16013	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
16014	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
16015	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
16016	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
16017	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
16018	// Subnet - Subnet bound to the IP configuration.
16019	Subnet *Subnet `json:"subnet,omitempty"`
16020	// Primary - Whether this is a primary customer address on the network interface.
16021	Primary *bool `json:"primary,omitempty"`
16022	// PublicIPAddress - Public IP address bound to the IP configuration.
16023	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
16024	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
16025	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
16026	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16027	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16028	// PrivateLinkConnectionProperties - READ-ONLY; PrivateLinkConnection properties for the network interface.
16029	PrivateLinkConnectionProperties *InterfaceIPConfigurationPrivateLinkConnectionProperties `json:"privateLinkConnectionProperties,omitempty"`
16030}
16031
16032// InterfaceListResult response for the ListNetworkInterface API service call.
16033type InterfaceListResult struct {
16034	autorest.Response `json:"-"`
16035	// Value - A list of network interfaces in a resource group.
16036	Value *[]Interface `json:"value,omitempty"`
16037	// NextLink - READ-ONLY; The URL to get the next set of results.
16038	NextLink *string `json:"nextLink,omitempty"`
16039}
16040
16041// InterfaceListResultIterator provides access to a complete listing of Interface values.
16042type InterfaceListResultIterator struct {
16043	i    int
16044	page InterfaceListResultPage
16045}
16046
16047// NextWithContext advances to the next value.  If there was an error making
16048// the request the iterator does not advance and the error is returned.
16049func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
16050	if tracing.IsEnabled() {
16051		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
16052		defer func() {
16053			sc := -1
16054			if iter.Response().Response.Response != nil {
16055				sc = iter.Response().Response.Response.StatusCode
16056			}
16057			tracing.EndSpan(ctx, sc, err)
16058		}()
16059	}
16060	iter.i++
16061	if iter.i < len(iter.page.Values()) {
16062		return nil
16063	}
16064	err = iter.page.NextWithContext(ctx)
16065	if err != nil {
16066		iter.i--
16067		return err
16068	}
16069	iter.i = 0
16070	return nil
16071}
16072
16073// Next advances to the next value.  If there was an error making
16074// the request the iterator does not advance and the error is returned.
16075// Deprecated: Use NextWithContext() instead.
16076func (iter *InterfaceListResultIterator) Next() error {
16077	return iter.NextWithContext(context.Background())
16078}
16079
16080// NotDone returns true if the enumeration should be started or is not yet complete.
16081func (iter InterfaceListResultIterator) NotDone() bool {
16082	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16083}
16084
16085// Response returns the raw server response from the last page request.
16086func (iter InterfaceListResultIterator) Response() InterfaceListResult {
16087	return iter.page.Response()
16088}
16089
16090// Value returns the current value or a zero-initialized value if the
16091// iterator has advanced beyond the end of the collection.
16092func (iter InterfaceListResultIterator) Value() Interface {
16093	if !iter.page.NotDone() {
16094		return Interface{}
16095	}
16096	return iter.page.Values()[iter.i]
16097}
16098
16099// Creates a new instance of the InterfaceListResultIterator type.
16100func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
16101	return InterfaceListResultIterator{page: page}
16102}
16103
16104// IsEmpty returns true if the ListResult contains no values.
16105func (ilr InterfaceListResult) IsEmpty() bool {
16106	return ilr.Value == nil || len(*ilr.Value) == 0
16107}
16108
16109// interfaceListResultPreparer prepares a request to retrieve the next set of results.
16110// It returns nil if no more results exist.
16111func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
16112	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
16113		return nil, nil
16114	}
16115	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16116		autorest.AsJSON(),
16117		autorest.AsGet(),
16118		autorest.WithBaseURL(to.String(ilr.NextLink)))
16119}
16120
16121// InterfaceListResultPage contains a page of Interface values.
16122type InterfaceListResultPage struct {
16123	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
16124	ilr InterfaceListResult
16125}
16126
16127// NextWithContext advances to the next page of values.  If there was an error making
16128// the request the page does not advance and the error is returned.
16129func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
16130	if tracing.IsEnabled() {
16131		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
16132		defer func() {
16133			sc := -1
16134			if page.Response().Response.Response != nil {
16135				sc = page.Response().Response.Response.StatusCode
16136			}
16137			tracing.EndSpan(ctx, sc, err)
16138		}()
16139	}
16140	next, err := page.fn(ctx, page.ilr)
16141	if err != nil {
16142		return err
16143	}
16144	page.ilr = next
16145	return nil
16146}
16147
16148// Next advances to the next page of values.  If there was an error making
16149// the request the page does not advance and the error is returned.
16150// Deprecated: Use NextWithContext() instead.
16151func (page *InterfaceListResultPage) Next() error {
16152	return page.NextWithContext(context.Background())
16153}
16154
16155// NotDone returns true if the page enumeration should be started or is not yet complete.
16156func (page InterfaceListResultPage) NotDone() bool {
16157	return !page.ilr.IsEmpty()
16158}
16159
16160// Response returns the raw server response from the last page request.
16161func (page InterfaceListResultPage) Response() InterfaceListResult {
16162	return page.ilr
16163}
16164
16165// Values returns the slice of values for the current page or nil if there are no values.
16166func (page InterfaceListResultPage) Values() []Interface {
16167	if page.ilr.IsEmpty() {
16168		return nil
16169	}
16170	return *page.ilr.Value
16171}
16172
16173// Creates a new instance of the InterfaceListResultPage type.
16174func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
16175	return InterfaceListResultPage{fn: getNextPage}
16176}
16177
16178// InterfaceLoadBalancerListResult response for list ip configurations API service call.
16179type InterfaceLoadBalancerListResult struct {
16180	autorest.Response `json:"-"`
16181	// Value - A list of load balancers.
16182	Value *[]LoadBalancer `json:"value,omitempty"`
16183	// NextLink - READ-ONLY; The URL to get the next set of results.
16184	NextLink *string `json:"nextLink,omitempty"`
16185}
16186
16187// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
16188type InterfaceLoadBalancerListResultIterator struct {
16189	i    int
16190	page InterfaceLoadBalancerListResultPage
16191}
16192
16193// NextWithContext advances to the next value.  If there was an error making
16194// the request the iterator does not advance and the error is returned.
16195func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
16196	if tracing.IsEnabled() {
16197		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
16198		defer func() {
16199			sc := -1
16200			if iter.Response().Response.Response != nil {
16201				sc = iter.Response().Response.Response.StatusCode
16202			}
16203			tracing.EndSpan(ctx, sc, err)
16204		}()
16205	}
16206	iter.i++
16207	if iter.i < len(iter.page.Values()) {
16208		return nil
16209	}
16210	err = iter.page.NextWithContext(ctx)
16211	if err != nil {
16212		iter.i--
16213		return err
16214	}
16215	iter.i = 0
16216	return nil
16217}
16218
16219// Next advances to the next value.  If there was an error making
16220// the request the iterator does not advance and the error is returned.
16221// Deprecated: Use NextWithContext() instead.
16222func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
16223	return iter.NextWithContext(context.Background())
16224}
16225
16226// NotDone returns true if the enumeration should be started or is not yet complete.
16227func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
16228	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16229}
16230
16231// Response returns the raw server response from the last page request.
16232func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
16233	return iter.page.Response()
16234}
16235
16236// Value returns the current value or a zero-initialized value if the
16237// iterator has advanced beyond the end of the collection.
16238func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
16239	if !iter.page.NotDone() {
16240		return LoadBalancer{}
16241	}
16242	return iter.page.Values()[iter.i]
16243}
16244
16245// Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
16246func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
16247	return InterfaceLoadBalancerListResultIterator{page: page}
16248}
16249
16250// IsEmpty returns true if the ListResult contains no values.
16251func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
16252	return ilblr.Value == nil || len(*ilblr.Value) == 0
16253}
16254
16255// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
16256// It returns nil if no more results exist.
16257func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
16258	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
16259		return nil, nil
16260	}
16261	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16262		autorest.AsJSON(),
16263		autorest.AsGet(),
16264		autorest.WithBaseURL(to.String(ilblr.NextLink)))
16265}
16266
16267// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
16268type InterfaceLoadBalancerListResultPage struct {
16269	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
16270	ilblr InterfaceLoadBalancerListResult
16271}
16272
16273// NextWithContext advances to the next page of values.  If there was an error making
16274// the request the page does not advance and the error is returned.
16275func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
16276	if tracing.IsEnabled() {
16277		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
16278		defer func() {
16279			sc := -1
16280			if page.Response().Response.Response != nil {
16281				sc = page.Response().Response.Response.StatusCode
16282			}
16283			tracing.EndSpan(ctx, sc, err)
16284		}()
16285	}
16286	next, err := page.fn(ctx, page.ilblr)
16287	if err != nil {
16288		return err
16289	}
16290	page.ilblr = next
16291	return nil
16292}
16293
16294// Next advances to the next page of values.  If there was an error making
16295// the request the page does not advance and the error is returned.
16296// Deprecated: Use NextWithContext() instead.
16297func (page *InterfaceLoadBalancerListResultPage) Next() error {
16298	return page.NextWithContext(context.Background())
16299}
16300
16301// NotDone returns true if the page enumeration should be started or is not yet complete.
16302func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
16303	return !page.ilblr.IsEmpty()
16304}
16305
16306// Response returns the raw server response from the last page request.
16307func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
16308	return page.ilblr
16309}
16310
16311// Values returns the slice of values for the current page or nil if there are no values.
16312func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
16313	if page.ilblr.IsEmpty() {
16314		return nil
16315	}
16316	return *page.ilblr.Value
16317}
16318
16319// Creates a new instance of the InterfaceLoadBalancerListResultPage type.
16320func NewInterfaceLoadBalancerListResultPage(getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
16321	return InterfaceLoadBalancerListResultPage{fn: getNextPage}
16322}
16323
16324// InterfacePropertiesFormat networkInterface properties.
16325type InterfacePropertiesFormat struct {
16326	// VirtualMachine - READ-ONLY; The reference of a virtual machine.
16327	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
16328	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
16329	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
16330	// PrivateEndpoint - READ-ONLY; A reference to the private endpoint to which the network interface is linked.
16331	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
16332	// IPConfigurations - A list of IPConfigurations of the network interface.
16333	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
16334	// TapConfigurations - A list of TapConfigurations of the network interface.
16335	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
16336	// DNSSettings - The DNS settings in network interface.
16337	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
16338	// MacAddress - The MAC address of the network interface.
16339	MacAddress *string `json:"macAddress,omitempty"`
16340	// Primary - Whether this is a primary network interface on a virtual machine.
16341	Primary *bool `json:"primary,omitempty"`
16342	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
16343	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
16344	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
16345	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
16346	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources.
16347	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
16348	// ResourceGUID - The resource GUID property of the network interface resource.
16349	ResourceGUID *string `json:"resourceGuid,omitempty"`
16350	// ProvisioningState - The provisioning state of the network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16351	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16352}
16353
16354// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
16355// long-running operation.
16356type InterfacesCreateOrUpdateFuture struct {
16357	azure.Future
16358}
16359
16360// Result returns the result of the asynchronous operation.
16361// If the operation has not completed it will return an error.
16362func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
16363	var done bool
16364	done, err = future.DoneWithContext(context.Background(), client)
16365	if err != nil {
16366		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16367		return
16368	}
16369	if !done {
16370		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
16371		return
16372	}
16373	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16374	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
16375		i, err = client.CreateOrUpdateResponder(i.Response.Response)
16376		if err != nil {
16377			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
16378		}
16379	}
16380	return
16381}
16382
16383// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
16384// operation.
16385type InterfacesDeleteFuture struct {
16386	azure.Future
16387}
16388
16389// Result returns the result of the asynchronous operation.
16390// If the operation has not completed it will return an error.
16391func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
16392	var done bool
16393	done, err = future.DoneWithContext(context.Background(), client)
16394	if err != nil {
16395		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
16396		return
16397	}
16398	if !done {
16399		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
16400		return
16401	}
16402	ar.Response = future.Response()
16403	return
16404}
16405
16406// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
16407// long-running operation.
16408type InterfacesGetEffectiveRouteTableFuture struct {
16409	azure.Future
16410}
16411
16412// Result returns the result of the asynchronous operation.
16413// If the operation has not completed it will return an error.
16414func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
16415	var done bool
16416	done, err = future.DoneWithContext(context.Background(), client)
16417	if err != nil {
16418		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
16419		return
16420	}
16421	if !done {
16422		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
16423		return
16424	}
16425	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16426	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
16427		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
16428		if err != nil {
16429			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
16430		}
16431	}
16432	return
16433}
16434
16435// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
16436// results of a long-running operation.
16437type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
16438	azure.Future
16439}
16440
16441// Result returns the result of the asynchronous operation.
16442// If the operation has not completed it will return an error.
16443func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
16444	var done bool
16445	done, err = future.DoneWithContext(context.Background(), client)
16446	if err != nil {
16447		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
16448		return
16449	}
16450	if !done {
16451		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
16452		return
16453	}
16454	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16455	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
16456		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
16457		if err != nil {
16458			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
16459		}
16460	}
16461	return
16462}
16463
16464// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
16465// operation.
16466type InterfacesUpdateTagsFuture struct {
16467	azure.Future
16468}
16469
16470// Result returns the result of the asynchronous operation.
16471// If the operation has not completed it will return an error.
16472func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
16473	var done bool
16474	done, err = future.DoneWithContext(context.Background(), client)
16475	if err != nil {
16476		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
16477		return
16478	}
16479	if !done {
16480		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
16481		return
16482	}
16483	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16484	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
16485		i, err = client.UpdateTagsResponder(i.Response.Response)
16486		if err != nil {
16487			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
16488		}
16489	}
16490	return
16491}
16492
16493// InterfaceTapConfiguration tap configuration in a Network Interface.
16494type InterfaceTapConfiguration struct {
16495	autorest.Response `json:"-"`
16496	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration.
16497	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
16498	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16499	Name *string `json:"name,omitempty"`
16500	// Etag - A unique read-only string that changes whenever the resource is updated.
16501	Etag *string `json:"etag,omitempty"`
16502	// Type - READ-ONLY; Sub Resource type.
16503	Type *string `json:"type,omitempty"`
16504	// ID - Resource ID.
16505	ID *string `json:"id,omitempty"`
16506}
16507
16508// MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
16509func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
16510	objectMap := make(map[string]interface{})
16511	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
16512		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
16513	}
16514	if itc.Name != nil {
16515		objectMap["name"] = itc.Name
16516	}
16517	if itc.Etag != nil {
16518		objectMap["etag"] = itc.Etag
16519	}
16520	if itc.ID != nil {
16521		objectMap["id"] = itc.ID
16522	}
16523	return json.Marshal(objectMap)
16524}
16525
16526// UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
16527func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
16528	var m map[string]*json.RawMessage
16529	err := json.Unmarshal(body, &m)
16530	if err != nil {
16531		return err
16532	}
16533	for k, v := range m {
16534		switch k {
16535		case "properties":
16536			if v != nil {
16537				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
16538				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
16539				if err != nil {
16540					return err
16541				}
16542				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
16543			}
16544		case "name":
16545			if v != nil {
16546				var name string
16547				err = json.Unmarshal(*v, &name)
16548				if err != nil {
16549					return err
16550				}
16551				itc.Name = &name
16552			}
16553		case "etag":
16554			if v != nil {
16555				var etag string
16556				err = json.Unmarshal(*v, &etag)
16557				if err != nil {
16558					return err
16559				}
16560				itc.Etag = &etag
16561			}
16562		case "type":
16563			if v != nil {
16564				var typeVar string
16565				err = json.Unmarshal(*v, &typeVar)
16566				if err != nil {
16567					return err
16568				}
16569				itc.Type = &typeVar
16570			}
16571		case "id":
16572			if v != nil {
16573				var ID string
16574				err = json.Unmarshal(*v, &ID)
16575				if err != nil {
16576					return err
16577				}
16578				itc.ID = &ID
16579			}
16580		}
16581	}
16582
16583	return nil
16584}
16585
16586// InterfaceTapConfigurationListResult response for list tap configurations API service call.
16587type InterfaceTapConfigurationListResult struct {
16588	autorest.Response `json:"-"`
16589	// Value - A list of tap configurations.
16590	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
16591	// NextLink - READ-ONLY; The URL to get the next set of results.
16592	NextLink *string `json:"nextLink,omitempty"`
16593}
16594
16595// InterfaceTapConfigurationListResultIterator provides access to a complete listing of
16596// InterfaceTapConfiguration values.
16597type InterfaceTapConfigurationListResultIterator struct {
16598	i    int
16599	page InterfaceTapConfigurationListResultPage
16600}
16601
16602// NextWithContext advances to the next value.  If there was an error making
16603// the request the iterator does not advance and the error is returned.
16604func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
16605	if tracing.IsEnabled() {
16606		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
16607		defer func() {
16608			sc := -1
16609			if iter.Response().Response.Response != nil {
16610				sc = iter.Response().Response.Response.StatusCode
16611			}
16612			tracing.EndSpan(ctx, sc, err)
16613		}()
16614	}
16615	iter.i++
16616	if iter.i < len(iter.page.Values()) {
16617		return nil
16618	}
16619	err = iter.page.NextWithContext(ctx)
16620	if err != nil {
16621		iter.i--
16622		return err
16623	}
16624	iter.i = 0
16625	return nil
16626}
16627
16628// Next advances to the next value.  If there was an error making
16629// the request the iterator does not advance and the error is returned.
16630// Deprecated: Use NextWithContext() instead.
16631func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
16632	return iter.NextWithContext(context.Background())
16633}
16634
16635// NotDone returns true if the enumeration should be started or is not yet complete.
16636func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
16637	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16638}
16639
16640// Response returns the raw server response from the last page request.
16641func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
16642	return iter.page.Response()
16643}
16644
16645// Value returns the current value or a zero-initialized value if the
16646// iterator has advanced beyond the end of the collection.
16647func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
16648	if !iter.page.NotDone() {
16649		return InterfaceTapConfiguration{}
16650	}
16651	return iter.page.Values()[iter.i]
16652}
16653
16654// Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
16655func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
16656	return InterfaceTapConfigurationListResultIterator{page: page}
16657}
16658
16659// IsEmpty returns true if the ListResult contains no values.
16660func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
16661	return itclr.Value == nil || len(*itclr.Value) == 0
16662}
16663
16664// interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
16665// It returns nil if no more results exist.
16666func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
16667	if itclr.NextLink == nil || len(to.String(itclr.NextLink)) < 1 {
16668		return nil, nil
16669	}
16670	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16671		autorest.AsJSON(),
16672		autorest.AsGet(),
16673		autorest.WithBaseURL(to.String(itclr.NextLink)))
16674}
16675
16676// InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
16677type InterfaceTapConfigurationListResultPage struct {
16678	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
16679	itclr InterfaceTapConfigurationListResult
16680}
16681
16682// NextWithContext advances to the next page of values.  If there was an error making
16683// the request the page does not advance and the error is returned.
16684func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
16685	if tracing.IsEnabled() {
16686		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
16687		defer func() {
16688			sc := -1
16689			if page.Response().Response.Response != nil {
16690				sc = page.Response().Response.Response.StatusCode
16691			}
16692			tracing.EndSpan(ctx, sc, err)
16693		}()
16694	}
16695	next, err := page.fn(ctx, page.itclr)
16696	if err != nil {
16697		return err
16698	}
16699	page.itclr = next
16700	return nil
16701}
16702
16703// Next advances to the next page of values.  If there was an error making
16704// the request the page does not advance and the error is returned.
16705// Deprecated: Use NextWithContext() instead.
16706func (page *InterfaceTapConfigurationListResultPage) Next() error {
16707	return page.NextWithContext(context.Background())
16708}
16709
16710// NotDone returns true if the page enumeration should be started or is not yet complete.
16711func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
16712	return !page.itclr.IsEmpty()
16713}
16714
16715// Response returns the raw server response from the last page request.
16716func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
16717	return page.itclr
16718}
16719
16720// Values returns the slice of values for the current page or nil if there are no values.
16721func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
16722	if page.itclr.IsEmpty() {
16723		return nil
16724	}
16725	return *page.itclr.Value
16726}
16727
16728// Creates a new instance of the InterfaceTapConfigurationListResultPage type.
16729func NewInterfaceTapConfigurationListResultPage(getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
16730	return InterfaceTapConfigurationListResultPage{fn: getNextPage}
16731}
16732
16733// InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
16734type InterfaceTapConfigurationPropertiesFormat struct {
16735	// VirtualNetworkTap - The reference of the Virtual Network Tap resource.
16736	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
16737	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16738	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16739}
16740
16741// InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
16742// of a long-running operation.
16743type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
16744	azure.Future
16745}
16746
16747// Result returns the result of the asynchronous operation.
16748// If the operation has not completed it will return an error.
16749func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) Result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
16750	var done bool
16751	done, err = future.DoneWithContext(context.Background(), client)
16752	if err != nil {
16753		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
16754		return
16755	}
16756	if !done {
16757		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
16758		return
16759	}
16760	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
16761	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
16762		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
16763		if err != nil {
16764			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
16765		}
16766	}
16767	return
16768}
16769
16770// InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
16771// long-running operation.
16772type InterfaceTapConfigurationsDeleteFuture struct {
16773	azure.Future
16774}
16775
16776// Result returns the result of the asynchronous operation.
16777// If the operation has not completed it will return an error.
16778func (future *InterfaceTapConfigurationsDeleteFuture) Result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
16779	var done bool
16780	done, err = future.DoneWithContext(context.Background(), client)
16781	if err != nil {
16782		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
16783		return
16784	}
16785	if !done {
16786		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
16787		return
16788	}
16789	ar.Response = future.Response()
16790	return
16791}
16792
16793// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call.
16794type IPAddressAvailabilityResult struct {
16795	autorest.Response `json:"-"`
16796	// Available - Private IP address availability.
16797	Available *bool `json:"available,omitempty"`
16798	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
16799	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
16800}
16801
16802// IPConfiguration IP configuration.
16803type IPConfiguration struct {
16804	// IPConfigurationPropertiesFormat - Properties of the IP configuration.
16805	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
16806	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
16807	Name *string `json:"name,omitempty"`
16808	// Etag - A unique read-only string that changes whenever the resource is updated.
16809	Etag *string `json:"etag,omitempty"`
16810	// ID - Resource ID.
16811	ID *string `json:"id,omitempty"`
16812}
16813
16814// MarshalJSON is the custom marshaler for IPConfiguration.
16815func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
16816	objectMap := make(map[string]interface{})
16817	if ic.IPConfigurationPropertiesFormat != nil {
16818		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
16819	}
16820	if ic.Name != nil {
16821		objectMap["name"] = ic.Name
16822	}
16823	if ic.Etag != nil {
16824		objectMap["etag"] = ic.Etag
16825	}
16826	if ic.ID != nil {
16827		objectMap["id"] = ic.ID
16828	}
16829	return json.Marshal(objectMap)
16830}
16831
16832// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
16833func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
16834	var m map[string]*json.RawMessage
16835	err := json.Unmarshal(body, &m)
16836	if err != nil {
16837		return err
16838	}
16839	for k, v := range m {
16840		switch k {
16841		case "properties":
16842			if v != nil {
16843				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
16844				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
16845				if err != nil {
16846					return err
16847				}
16848				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
16849			}
16850		case "name":
16851			if v != nil {
16852				var name string
16853				err = json.Unmarshal(*v, &name)
16854				if err != nil {
16855					return err
16856				}
16857				ic.Name = &name
16858			}
16859		case "etag":
16860			if v != nil {
16861				var etag string
16862				err = json.Unmarshal(*v, &etag)
16863				if err != nil {
16864					return err
16865				}
16866				ic.Etag = &etag
16867			}
16868		case "id":
16869			if v != nil {
16870				var ID string
16871				err = json.Unmarshal(*v, &ID)
16872				if err != nil {
16873					return err
16874				}
16875				ic.ID = &ID
16876			}
16877		}
16878	}
16879
16880	return nil
16881}
16882
16883// IPConfigurationProfile IP configuration profile child resource.
16884type IPConfigurationProfile struct {
16885	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
16886	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
16887	// Name - The name of the resource. This name can be used to access the resource.
16888	Name *string `json:"name,omitempty"`
16889	// Type - READ-ONLY; Sub Resource type.
16890	Type *string `json:"type,omitempty"`
16891	// Etag - A unique read-only string that changes whenever the resource is updated.
16892	Etag *string `json:"etag,omitempty"`
16893	// ID - Resource ID.
16894	ID *string `json:"id,omitempty"`
16895}
16896
16897// MarshalJSON is the custom marshaler for IPConfigurationProfile.
16898func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
16899	objectMap := make(map[string]interface{})
16900	if icp.IPConfigurationProfilePropertiesFormat != nil {
16901		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
16902	}
16903	if icp.Name != nil {
16904		objectMap["name"] = icp.Name
16905	}
16906	if icp.Etag != nil {
16907		objectMap["etag"] = icp.Etag
16908	}
16909	if icp.ID != nil {
16910		objectMap["id"] = icp.ID
16911	}
16912	return json.Marshal(objectMap)
16913}
16914
16915// UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
16916func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
16917	var m map[string]*json.RawMessage
16918	err := json.Unmarshal(body, &m)
16919	if err != nil {
16920		return err
16921	}
16922	for k, v := range m {
16923		switch k {
16924		case "properties":
16925			if v != nil {
16926				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
16927				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
16928				if err != nil {
16929					return err
16930				}
16931				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
16932			}
16933		case "name":
16934			if v != nil {
16935				var name string
16936				err = json.Unmarshal(*v, &name)
16937				if err != nil {
16938					return err
16939				}
16940				icp.Name = &name
16941			}
16942		case "type":
16943			if v != nil {
16944				var typeVar string
16945				err = json.Unmarshal(*v, &typeVar)
16946				if err != nil {
16947					return err
16948				}
16949				icp.Type = &typeVar
16950			}
16951		case "etag":
16952			if v != nil {
16953				var etag string
16954				err = json.Unmarshal(*v, &etag)
16955				if err != nil {
16956					return err
16957				}
16958				icp.Etag = &etag
16959			}
16960		case "id":
16961			if v != nil {
16962				var ID string
16963				err = json.Unmarshal(*v, &ID)
16964				if err != nil {
16965					return err
16966				}
16967				icp.ID = &ID
16968			}
16969		}
16970	}
16971
16972	return nil
16973}
16974
16975// IPConfigurationProfilePropertiesFormat IP configuration profile properties.
16976type IPConfigurationProfilePropertiesFormat struct {
16977	// Subnet - The reference of the subnet resource to create a container network interface ip configuration.
16978	Subnet *Subnet `json:"subnet,omitempty"`
16979	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16980	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16981}
16982
16983// IPConfigurationPropertiesFormat properties of IP configuration.
16984type IPConfigurationPropertiesFormat struct {
16985	// PrivateIPAddress - The private IP address of the IP configuration.
16986	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
16987	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
16988	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
16989	// Subnet - The reference of the subnet resource.
16990	Subnet *Subnet `json:"subnet,omitempty"`
16991	// PublicIPAddress - The reference of the public IP resource.
16992	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
16993	// ProvisioningState - The provisioning state of the IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
16994	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
16995}
16996
16997// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection.
16998type IpsecPolicy struct {
16999	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
17000	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
17001	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
17002	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
17003	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
17004	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
17005	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
17006	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
17007	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
17008	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
17009	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
17010	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
17011	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
17012	DhGroup DhGroup `json:"dhGroup,omitempty"`
17013	// 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'
17014	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
17015}
17016
17017// IPTag contains the IpTag associated with the object.
17018type IPTag struct {
17019	// IPTagType - The IP tag type. Example: FirstPartyUsage.
17020	IPTagType *string `json:"ipTagType,omitempty"`
17021	// Tag - The value of the IP tag associated with the public IP. Example: SQL.
17022	Tag *string `json:"tag,omitempty"`
17023}
17024
17025// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
17026type Ipv6ExpressRouteCircuitPeeringConfig struct {
17027	// PrimaryPeerAddressPrefix - The primary address prefix.
17028	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
17029	// SecondaryPeerAddressPrefix - The secondary address prefix.
17030	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
17031	// MicrosoftPeeringConfig - The Microsoft peering configuration.
17032	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
17033	// RouteFilter - The reference of the RouteFilter resource.
17034	RouteFilter *SubResource `json:"routeFilter,omitempty"`
17035	// State - The state of peering. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
17036	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
17037}
17038
17039// ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
17040// the next set of results.
17041type ListHubVirtualNetworkConnectionsResult struct {
17042	autorest.Response `json:"-"`
17043	// Value - List of HubVirtualNetworkConnections.
17044	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
17045	// NextLink - URL to get the next set of operation list results if there are any.
17046	NextLink *string `json:"nextLink,omitempty"`
17047}
17048
17049// ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
17050// HubVirtualNetworkConnection values.
17051type ListHubVirtualNetworkConnectionsResultIterator struct {
17052	i    int
17053	page ListHubVirtualNetworkConnectionsResultPage
17054}
17055
17056// NextWithContext advances to the next value.  If there was an error making
17057// the request the iterator does not advance and the error is returned.
17058func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
17059	if tracing.IsEnabled() {
17060		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
17061		defer func() {
17062			sc := -1
17063			if iter.Response().Response.Response != nil {
17064				sc = iter.Response().Response.Response.StatusCode
17065			}
17066			tracing.EndSpan(ctx, sc, err)
17067		}()
17068	}
17069	iter.i++
17070	if iter.i < len(iter.page.Values()) {
17071		return nil
17072	}
17073	err = iter.page.NextWithContext(ctx)
17074	if err != nil {
17075		iter.i--
17076		return err
17077	}
17078	iter.i = 0
17079	return nil
17080}
17081
17082// Next advances to the next value.  If there was an error making
17083// the request the iterator does not advance and the error is returned.
17084// Deprecated: Use NextWithContext() instead.
17085func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
17086	return iter.NextWithContext(context.Background())
17087}
17088
17089// NotDone returns true if the enumeration should be started or is not yet complete.
17090func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
17091	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17092}
17093
17094// Response returns the raw server response from the last page request.
17095func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
17096	return iter.page.Response()
17097}
17098
17099// Value returns the current value or a zero-initialized value if the
17100// iterator has advanced beyond the end of the collection.
17101func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
17102	if !iter.page.NotDone() {
17103		return HubVirtualNetworkConnection{}
17104	}
17105	return iter.page.Values()[iter.i]
17106}
17107
17108// Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
17109func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
17110	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
17111}
17112
17113// IsEmpty returns true if the ListResult contains no values.
17114func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
17115	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
17116}
17117
17118// listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
17119// It returns nil if no more results exist.
17120func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
17121	if lhvncr.NextLink == nil || len(to.String(lhvncr.NextLink)) < 1 {
17122		return nil, nil
17123	}
17124	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17125		autorest.AsJSON(),
17126		autorest.AsGet(),
17127		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
17128}
17129
17130// ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
17131type ListHubVirtualNetworkConnectionsResultPage struct {
17132	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
17133	lhvncr ListHubVirtualNetworkConnectionsResult
17134}
17135
17136// NextWithContext advances to the next page of values.  If there was an error making
17137// the request the page does not advance and the error is returned.
17138func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
17139	if tracing.IsEnabled() {
17140		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
17141		defer func() {
17142			sc := -1
17143			if page.Response().Response.Response != nil {
17144				sc = page.Response().Response.Response.StatusCode
17145			}
17146			tracing.EndSpan(ctx, sc, err)
17147		}()
17148	}
17149	next, err := page.fn(ctx, page.lhvncr)
17150	if err != nil {
17151		return err
17152	}
17153	page.lhvncr = next
17154	return nil
17155}
17156
17157// Next advances to the next page of values.  If there was an error making
17158// the request the page does not advance and the error is returned.
17159// Deprecated: Use NextWithContext() instead.
17160func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
17161	return page.NextWithContext(context.Background())
17162}
17163
17164// NotDone returns true if the page enumeration should be started or is not yet complete.
17165func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
17166	return !page.lhvncr.IsEmpty()
17167}
17168
17169// Response returns the raw server response from the last page request.
17170func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
17171	return page.lhvncr
17172}
17173
17174// Values returns the slice of values for the current page or nil if there are no values.
17175func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
17176	if page.lhvncr.IsEmpty() {
17177		return nil
17178	}
17179	return *page.lhvncr.Value
17180}
17181
17182// Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
17183func NewListHubVirtualNetworkConnectionsResultPage(getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
17184	return ListHubVirtualNetworkConnectionsResultPage{fn: getNextPage}
17185}
17186
17187// ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
17188// P2SVpnGateways and a URL nextLink to get the next set of results.
17189type ListP2SVpnGatewaysResult struct {
17190	autorest.Response `json:"-"`
17191	// Value - List of P2SVpnGateways.
17192	Value *[]P2SVpnGateway `json:"value,omitempty"`
17193	// NextLink - URL to get the next set of operation list results if there are any.
17194	NextLink *string `json:"nextLink,omitempty"`
17195}
17196
17197// ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
17198type ListP2SVpnGatewaysResultIterator struct {
17199	i    int
17200	page ListP2SVpnGatewaysResultPage
17201}
17202
17203// NextWithContext advances to the next value.  If there was an error making
17204// the request the iterator does not advance and the error is returned.
17205func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
17206	if tracing.IsEnabled() {
17207		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
17208		defer func() {
17209			sc := -1
17210			if iter.Response().Response.Response != nil {
17211				sc = iter.Response().Response.Response.StatusCode
17212			}
17213			tracing.EndSpan(ctx, sc, err)
17214		}()
17215	}
17216	iter.i++
17217	if iter.i < len(iter.page.Values()) {
17218		return nil
17219	}
17220	err = iter.page.NextWithContext(ctx)
17221	if err != nil {
17222		iter.i--
17223		return err
17224	}
17225	iter.i = 0
17226	return nil
17227}
17228
17229// Next advances to the next value.  If there was an error making
17230// the request the iterator does not advance and the error is returned.
17231// Deprecated: Use NextWithContext() instead.
17232func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
17233	return iter.NextWithContext(context.Background())
17234}
17235
17236// NotDone returns true if the enumeration should be started or is not yet complete.
17237func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
17238	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17239}
17240
17241// Response returns the raw server response from the last page request.
17242func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
17243	return iter.page.Response()
17244}
17245
17246// Value returns the current value or a zero-initialized value if the
17247// iterator has advanced beyond the end of the collection.
17248func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
17249	if !iter.page.NotDone() {
17250		return P2SVpnGateway{}
17251	}
17252	return iter.page.Values()[iter.i]
17253}
17254
17255// Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
17256func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
17257	return ListP2SVpnGatewaysResultIterator{page: page}
17258}
17259
17260// IsEmpty returns true if the ListResult contains no values.
17261func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
17262	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
17263}
17264
17265// listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
17266// It returns nil if no more results exist.
17267func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
17268	if lpvgr.NextLink == nil || len(to.String(lpvgr.NextLink)) < 1 {
17269		return nil, nil
17270	}
17271	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17272		autorest.AsJSON(),
17273		autorest.AsGet(),
17274		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
17275}
17276
17277// ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
17278type ListP2SVpnGatewaysResultPage struct {
17279	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
17280	lpvgr ListP2SVpnGatewaysResult
17281}
17282
17283// NextWithContext advances to the next page of values.  If there was an error making
17284// the request the page does not advance and the error is returned.
17285func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
17286	if tracing.IsEnabled() {
17287		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
17288		defer func() {
17289			sc := -1
17290			if page.Response().Response.Response != nil {
17291				sc = page.Response().Response.Response.StatusCode
17292			}
17293			tracing.EndSpan(ctx, sc, err)
17294		}()
17295	}
17296	next, err := page.fn(ctx, page.lpvgr)
17297	if err != nil {
17298		return err
17299	}
17300	page.lpvgr = next
17301	return nil
17302}
17303
17304// Next advances to the next page of values.  If there was an error making
17305// the request the page does not advance and the error is returned.
17306// Deprecated: Use NextWithContext() instead.
17307func (page *ListP2SVpnGatewaysResultPage) Next() error {
17308	return page.NextWithContext(context.Background())
17309}
17310
17311// NotDone returns true if the page enumeration should be started or is not yet complete.
17312func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
17313	return !page.lpvgr.IsEmpty()
17314}
17315
17316// Response returns the raw server response from the last page request.
17317func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
17318	return page.lpvgr
17319}
17320
17321// Values returns the slice of values for the current page or nil if there are no values.
17322func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
17323	if page.lpvgr.IsEmpty() {
17324		return nil
17325	}
17326	return *page.lpvgr.Value
17327}
17328
17329// Creates a new instance of the ListP2SVpnGatewaysResultPage type.
17330func NewListP2SVpnGatewaysResultPage(getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
17331	return ListP2SVpnGatewaysResultPage{fn: getNextPage}
17332}
17333
17334// ListP2SVpnServerConfigurationsResult result of the request to list all P2SVpnServerConfigurations
17335// associated to a VirtualWan. It contains a list of P2SVpnServerConfigurations and a URL nextLink to get
17336// the next set of results.
17337type ListP2SVpnServerConfigurationsResult struct {
17338	autorest.Response `json:"-"`
17339	// Value - List of P2SVpnServerConfigurations.
17340	Value *[]P2SVpnServerConfiguration `json:"value,omitempty"`
17341	// NextLink - URL to get the next set of operation list results if there are any.
17342	NextLink *string `json:"nextLink,omitempty"`
17343}
17344
17345// ListP2SVpnServerConfigurationsResultIterator provides access to a complete listing of
17346// P2SVpnServerConfiguration values.
17347type ListP2SVpnServerConfigurationsResultIterator struct {
17348	i    int
17349	page ListP2SVpnServerConfigurationsResultPage
17350}
17351
17352// NextWithContext advances to the next value.  If there was an error making
17353// the request the iterator does not advance and the error is returned.
17354func (iter *ListP2SVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
17355	if tracing.IsEnabled() {
17356		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultIterator.NextWithContext")
17357		defer func() {
17358			sc := -1
17359			if iter.Response().Response.Response != nil {
17360				sc = iter.Response().Response.Response.StatusCode
17361			}
17362			tracing.EndSpan(ctx, sc, err)
17363		}()
17364	}
17365	iter.i++
17366	if iter.i < len(iter.page.Values()) {
17367		return nil
17368	}
17369	err = iter.page.NextWithContext(ctx)
17370	if err != nil {
17371		iter.i--
17372		return err
17373	}
17374	iter.i = 0
17375	return nil
17376}
17377
17378// Next advances to the next value.  If there was an error making
17379// the request the iterator does not advance and the error is returned.
17380// Deprecated: Use NextWithContext() instead.
17381func (iter *ListP2SVpnServerConfigurationsResultIterator) Next() error {
17382	return iter.NextWithContext(context.Background())
17383}
17384
17385// NotDone returns true if the enumeration should be started or is not yet complete.
17386func (iter ListP2SVpnServerConfigurationsResultIterator) NotDone() bool {
17387	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17388}
17389
17390// Response returns the raw server response from the last page request.
17391func (iter ListP2SVpnServerConfigurationsResultIterator) Response() ListP2SVpnServerConfigurationsResult {
17392	return iter.page.Response()
17393}
17394
17395// Value returns the current value or a zero-initialized value if the
17396// iterator has advanced beyond the end of the collection.
17397func (iter ListP2SVpnServerConfigurationsResultIterator) Value() P2SVpnServerConfiguration {
17398	if !iter.page.NotDone() {
17399		return P2SVpnServerConfiguration{}
17400	}
17401	return iter.page.Values()[iter.i]
17402}
17403
17404// Creates a new instance of the ListP2SVpnServerConfigurationsResultIterator type.
17405func NewListP2SVpnServerConfigurationsResultIterator(page ListP2SVpnServerConfigurationsResultPage) ListP2SVpnServerConfigurationsResultIterator {
17406	return ListP2SVpnServerConfigurationsResultIterator{page: page}
17407}
17408
17409// IsEmpty returns true if the ListResult contains no values.
17410func (lpvscr ListP2SVpnServerConfigurationsResult) IsEmpty() bool {
17411	return lpvscr.Value == nil || len(*lpvscr.Value) == 0
17412}
17413
17414// listP2SVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
17415// It returns nil if no more results exist.
17416func (lpvscr ListP2SVpnServerConfigurationsResult) listP2SVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
17417	if lpvscr.NextLink == nil || len(to.String(lpvscr.NextLink)) < 1 {
17418		return nil, nil
17419	}
17420	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17421		autorest.AsJSON(),
17422		autorest.AsGet(),
17423		autorest.WithBaseURL(to.String(lpvscr.NextLink)))
17424}
17425
17426// ListP2SVpnServerConfigurationsResultPage contains a page of P2SVpnServerConfiguration values.
17427type ListP2SVpnServerConfigurationsResultPage struct {
17428	fn     func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)
17429	lpvscr ListP2SVpnServerConfigurationsResult
17430}
17431
17432// NextWithContext advances to the next page of values.  If there was an error making
17433// the request the page does not advance and the error is returned.
17434func (page *ListP2SVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
17435	if tracing.IsEnabled() {
17436		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnServerConfigurationsResultPage.NextWithContext")
17437		defer func() {
17438			sc := -1
17439			if page.Response().Response.Response != nil {
17440				sc = page.Response().Response.Response.StatusCode
17441			}
17442			tracing.EndSpan(ctx, sc, err)
17443		}()
17444	}
17445	next, err := page.fn(ctx, page.lpvscr)
17446	if err != nil {
17447		return err
17448	}
17449	page.lpvscr = next
17450	return nil
17451}
17452
17453// Next advances to the next page of values.  If there was an error making
17454// the request the page does not advance and the error is returned.
17455// Deprecated: Use NextWithContext() instead.
17456func (page *ListP2SVpnServerConfigurationsResultPage) Next() error {
17457	return page.NextWithContext(context.Background())
17458}
17459
17460// NotDone returns true if the page enumeration should be started or is not yet complete.
17461func (page ListP2SVpnServerConfigurationsResultPage) NotDone() bool {
17462	return !page.lpvscr.IsEmpty()
17463}
17464
17465// Response returns the raw server response from the last page request.
17466func (page ListP2SVpnServerConfigurationsResultPage) Response() ListP2SVpnServerConfigurationsResult {
17467	return page.lpvscr
17468}
17469
17470// Values returns the slice of values for the current page or nil if there are no values.
17471func (page ListP2SVpnServerConfigurationsResultPage) Values() []P2SVpnServerConfiguration {
17472	if page.lpvscr.IsEmpty() {
17473		return nil
17474	}
17475	return *page.lpvscr.Value
17476}
17477
17478// Creates a new instance of the ListP2SVpnServerConfigurationsResultPage type.
17479func NewListP2SVpnServerConfigurationsResultPage(getNextPage func(context.Context, ListP2SVpnServerConfigurationsResult) (ListP2SVpnServerConfigurationsResult, error)) ListP2SVpnServerConfigurationsResultPage {
17480	return ListP2SVpnServerConfigurationsResultPage{fn: getNextPage}
17481}
17482
17483// ListString ...
17484type ListString struct {
17485	autorest.Response `json:"-"`
17486	Value             *[]string `json:"value,omitempty"`
17487}
17488
17489// ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
17490// URL nextLink to get the next set of results.
17491type ListVirtualHubsResult struct {
17492	autorest.Response `json:"-"`
17493	// Value - List of VirtualHubs.
17494	Value *[]VirtualHub `json:"value,omitempty"`
17495	// NextLink - URL to get the next set of operation list results if there are any.
17496	NextLink *string `json:"nextLink,omitempty"`
17497}
17498
17499// ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
17500type ListVirtualHubsResultIterator struct {
17501	i    int
17502	page ListVirtualHubsResultPage
17503}
17504
17505// NextWithContext advances to the next value.  If there was an error making
17506// the request the iterator does not advance and the error is returned.
17507func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
17508	if tracing.IsEnabled() {
17509		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
17510		defer func() {
17511			sc := -1
17512			if iter.Response().Response.Response != nil {
17513				sc = iter.Response().Response.Response.StatusCode
17514			}
17515			tracing.EndSpan(ctx, sc, err)
17516		}()
17517	}
17518	iter.i++
17519	if iter.i < len(iter.page.Values()) {
17520		return nil
17521	}
17522	err = iter.page.NextWithContext(ctx)
17523	if err != nil {
17524		iter.i--
17525		return err
17526	}
17527	iter.i = 0
17528	return nil
17529}
17530
17531// Next advances to the next value.  If there was an error making
17532// the request the iterator does not advance and the error is returned.
17533// Deprecated: Use NextWithContext() instead.
17534func (iter *ListVirtualHubsResultIterator) Next() error {
17535	return iter.NextWithContext(context.Background())
17536}
17537
17538// NotDone returns true if the enumeration should be started or is not yet complete.
17539func (iter ListVirtualHubsResultIterator) NotDone() bool {
17540	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17541}
17542
17543// Response returns the raw server response from the last page request.
17544func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
17545	return iter.page.Response()
17546}
17547
17548// Value returns the current value or a zero-initialized value if the
17549// iterator has advanced beyond the end of the collection.
17550func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
17551	if !iter.page.NotDone() {
17552		return VirtualHub{}
17553	}
17554	return iter.page.Values()[iter.i]
17555}
17556
17557// Creates a new instance of the ListVirtualHubsResultIterator type.
17558func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
17559	return ListVirtualHubsResultIterator{page: page}
17560}
17561
17562// IsEmpty returns true if the ListResult contains no values.
17563func (lvhr ListVirtualHubsResult) IsEmpty() bool {
17564	return lvhr.Value == nil || len(*lvhr.Value) == 0
17565}
17566
17567// listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
17568// It returns nil if no more results exist.
17569func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
17570	if lvhr.NextLink == nil || len(to.String(lvhr.NextLink)) < 1 {
17571		return nil, nil
17572	}
17573	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17574		autorest.AsJSON(),
17575		autorest.AsGet(),
17576		autorest.WithBaseURL(to.String(lvhr.NextLink)))
17577}
17578
17579// ListVirtualHubsResultPage contains a page of VirtualHub values.
17580type ListVirtualHubsResultPage struct {
17581	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
17582	lvhr ListVirtualHubsResult
17583}
17584
17585// NextWithContext advances to the next page of values.  If there was an error making
17586// the request the page does not advance and the error is returned.
17587func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
17588	if tracing.IsEnabled() {
17589		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
17590		defer func() {
17591			sc := -1
17592			if page.Response().Response.Response != nil {
17593				sc = page.Response().Response.Response.StatusCode
17594			}
17595			tracing.EndSpan(ctx, sc, err)
17596		}()
17597	}
17598	next, err := page.fn(ctx, page.lvhr)
17599	if err != nil {
17600		return err
17601	}
17602	page.lvhr = next
17603	return nil
17604}
17605
17606// Next advances to the next page of values.  If there was an error making
17607// the request the page does not advance and the error is returned.
17608// Deprecated: Use NextWithContext() instead.
17609func (page *ListVirtualHubsResultPage) Next() error {
17610	return page.NextWithContext(context.Background())
17611}
17612
17613// NotDone returns true if the page enumeration should be started or is not yet complete.
17614func (page ListVirtualHubsResultPage) NotDone() bool {
17615	return !page.lvhr.IsEmpty()
17616}
17617
17618// Response returns the raw server response from the last page request.
17619func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
17620	return page.lvhr
17621}
17622
17623// Values returns the slice of values for the current page or nil if there are no values.
17624func (page ListVirtualHubsResultPage) Values() []VirtualHub {
17625	if page.lvhr.IsEmpty() {
17626		return nil
17627	}
17628	return *page.lvhr.Value
17629}
17630
17631// Creates a new instance of the ListVirtualHubsResultPage type.
17632func NewListVirtualHubsResultPage(getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
17633	return ListVirtualHubsResultPage{fn: getNextPage}
17634}
17635
17636// ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
17637// URL nextLink to get the next set of results.
17638type ListVirtualWANsResult struct {
17639	autorest.Response `json:"-"`
17640	// Value - List of VirtualWANs.
17641	Value *[]VirtualWAN `json:"value,omitempty"`
17642	// NextLink - URL to get the next set of operation list results if there are any.
17643	NextLink *string `json:"nextLink,omitempty"`
17644}
17645
17646// ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
17647type ListVirtualWANsResultIterator struct {
17648	i    int
17649	page ListVirtualWANsResultPage
17650}
17651
17652// NextWithContext advances to the next value.  If there was an error making
17653// the request the iterator does not advance and the error is returned.
17654func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
17655	if tracing.IsEnabled() {
17656		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
17657		defer func() {
17658			sc := -1
17659			if iter.Response().Response.Response != nil {
17660				sc = iter.Response().Response.Response.StatusCode
17661			}
17662			tracing.EndSpan(ctx, sc, err)
17663		}()
17664	}
17665	iter.i++
17666	if iter.i < len(iter.page.Values()) {
17667		return nil
17668	}
17669	err = iter.page.NextWithContext(ctx)
17670	if err != nil {
17671		iter.i--
17672		return err
17673	}
17674	iter.i = 0
17675	return nil
17676}
17677
17678// Next advances to the next value.  If there was an error making
17679// the request the iterator does not advance and the error is returned.
17680// Deprecated: Use NextWithContext() instead.
17681func (iter *ListVirtualWANsResultIterator) Next() error {
17682	return iter.NextWithContext(context.Background())
17683}
17684
17685// NotDone returns true if the enumeration should be started or is not yet complete.
17686func (iter ListVirtualWANsResultIterator) NotDone() bool {
17687	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17688}
17689
17690// Response returns the raw server response from the last page request.
17691func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
17692	return iter.page.Response()
17693}
17694
17695// Value returns the current value or a zero-initialized value if the
17696// iterator has advanced beyond the end of the collection.
17697func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
17698	if !iter.page.NotDone() {
17699		return VirtualWAN{}
17700	}
17701	return iter.page.Values()[iter.i]
17702}
17703
17704// Creates a new instance of the ListVirtualWANsResultIterator type.
17705func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
17706	return ListVirtualWANsResultIterator{page: page}
17707}
17708
17709// IsEmpty returns true if the ListResult contains no values.
17710func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
17711	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
17712}
17713
17714// listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
17715// It returns nil if no more results exist.
17716func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
17717	if lvwnr.NextLink == nil || len(to.String(lvwnr.NextLink)) < 1 {
17718		return nil, nil
17719	}
17720	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17721		autorest.AsJSON(),
17722		autorest.AsGet(),
17723		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
17724}
17725
17726// ListVirtualWANsResultPage contains a page of VirtualWAN values.
17727type ListVirtualWANsResultPage struct {
17728	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
17729	lvwnr ListVirtualWANsResult
17730}
17731
17732// NextWithContext advances to the next page of values.  If there was an error making
17733// the request the page does not advance and the error is returned.
17734func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
17735	if tracing.IsEnabled() {
17736		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
17737		defer func() {
17738			sc := -1
17739			if page.Response().Response.Response != nil {
17740				sc = page.Response().Response.Response.StatusCode
17741			}
17742			tracing.EndSpan(ctx, sc, err)
17743		}()
17744	}
17745	next, err := page.fn(ctx, page.lvwnr)
17746	if err != nil {
17747		return err
17748	}
17749	page.lvwnr = next
17750	return nil
17751}
17752
17753// Next advances to the next page of values.  If there was an error making
17754// the request the page does not advance and the error is returned.
17755// Deprecated: Use NextWithContext() instead.
17756func (page *ListVirtualWANsResultPage) Next() error {
17757	return page.NextWithContext(context.Background())
17758}
17759
17760// NotDone returns true if the page enumeration should be started or is not yet complete.
17761func (page ListVirtualWANsResultPage) NotDone() bool {
17762	return !page.lvwnr.IsEmpty()
17763}
17764
17765// Response returns the raw server response from the last page request.
17766func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
17767	return page.lvwnr
17768}
17769
17770// Values returns the slice of values for the current page or nil if there are no values.
17771func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
17772	if page.lvwnr.IsEmpty() {
17773		return nil
17774	}
17775	return *page.lvwnr.Value
17776}
17777
17778// Creates a new instance of the ListVirtualWANsResultPage type.
17779func NewListVirtualWANsResultPage(getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
17780	return ListVirtualWANsResultPage{fn: getNextPage}
17781}
17782
17783// ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
17784// It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
17785type ListVpnConnectionsResult struct {
17786	autorest.Response `json:"-"`
17787	// Value - List of Vpn Connections.
17788	Value *[]VpnConnection `json:"value,omitempty"`
17789	// NextLink - URL to get the next set of operation list results if there are any.
17790	NextLink *string `json:"nextLink,omitempty"`
17791}
17792
17793// ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
17794type ListVpnConnectionsResultIterator struct {
17795	i    int
17796	page ListVpnConnectionsResultPage
17797}
17798
17799// NextWithContext advances to the next value.  If there was an error making
17800// the request the iterator does not advance and the error is returned.
17801func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
17802	if tracing.IsEnabled() {
17803		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
17804		defer func() {
17805			sc := -1
17806			if iter.Response().Response.Response != nil {
17807				sc = iter.Response().Response.Response.StatusCode
17808			}
17809			tracing.EndSpan(ctx, sc, err)
17810		}()
17811	}
17812	iter.i++
17813	if iter.i < len(iter.page.Values()) {
17814		return nil
17815	}
17816	err = iter.page.NextWithContext(ctx)
17817	if err != nil {
17818		iter.i--
17819		return err
17820	}
17821	iter.i = 0
17822	return nil
17823}
17824
17825// Next advances to the next value.  If there was an error making
17826// the request the iterator does not advance and the error is returned.
17827// Deprecated: Use NextWithContext() instead.
17828func (iter *ListVpnConnectionsResultIterator) Next() error {
17829	return iter.NextWithContext(context.Background())
17830}
17831
17832// NotDone returns true if the enumeration should be started or is not yet complete.
17833func (iter ListVpnConnectionsResultIterator) NotDone() bool {
17834	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17835}
17836
17837// Response returns the raw server response from the last page request.
17838func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
17839	return iter.page.Response()
17840}
17841
17842// Value returns the current value or a zero-initialized value if the
17843// iterator has advanced beyond the end of the collection.
17844func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
17845	if !iter.page.NotDone() {
17846		return VpnConnection{}
17847	}
17848	return iter.page.Values()[iter.i]
17849}
17850
17851// Creates a new instance of the ListVpnConnectionsResultIterator type.
17852func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
17853	return ListVpnConnectionsResultIterator{page: page}
17854}
17855
17856// IsEmpty returns true if the ListResult contains no values.
17857func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
17858	return lvcr.Value == nil || len(*lvcr.Value) == 0
17859}
17860
17861// listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
17862// It returns nil if no more results exist.
17863func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
17864	if lvcr.NextLink == nil || len(to.String(lvcr.NextLink)) < 1 {
17865		return nil, nil
17866	}
17867	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17868		autorest.AsJSON(),
17869		autorest.AsGet(),
17870		autorest.WithBaseURL(to.String(lvcr.NextLink)))
17871}
17872
17873// ListVpnConnectionsResultPage contains a page of VpnConnection values.
17874type ListVpnConnectionsResultPage struct {
17875	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
17876	lvcr ListVpnConnectionsResult
17877}
17878
17879// NextWithContext advances to the next page of values.  If there was an error making
17880// the request the page does not advance and the error is returned.
17881func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
17882	if tracing.IsEnabled() {
17883		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
17884		defer func() {
17885			sc := -1
17886			if page.Response().Response.Response != nil {
17887				sc = page.Response().Response.Response.StatusCode
17888			}
17889			tracing.EndSpan(ctx, sc, err)
17890		}()
17891	}
17892	next, err := page.fn(ctx, page.lvcr)
17893	if err != nil {
17894		return err
17895	}
17896	page.lvcr = next
17897	return nil
17898}
17899
17900// Next advances to the next page of values.  If there was an error making
17901// the request the page does not advance and the error is returned.
17902// Deprecated: Use NextWithContext() instead.
17903func (page *ListVpnConnectionsResultPage) Next() error {
17904	return page.NextWithContext(context.Background())
17905}
17906
17907// NotDone returns true if the page enumeration should be started or is not yet complete.
17908func (page ListVpnConnectionsResultPage) NotDone() bool {
17909	return !page.lvcr.IsEmpty()
17910}
17911
17912// Response returns the raw server response from the last page request.
17913func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
17914	return page.lvcr
17915}
17916
17917// Values returns the slice of values for the current page or nil if there are no values.
17918func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
17919	if page.lvcr.IsEmpty() {
17920		return nil
17921	}
17922	return *page.lvcr.Value
17923}
17924
17925// Creates a new instance of the ListVpnConnectionsResultPage type.
17926func NewListVpnConnectionsResultPage(getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
17927	return ListVpnConnectionsResultPage{fn: getNextPage}
17928}
17929
17930// ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
17931// URL nextLink to get the next set of results.
17932type ListVpnGatewaysResult struct {
17933	autorest.Response `json:"-"`
17934	// Value - List of VpnGateways.
17935	Value *[]VpnGateway `json:"value,omitempty"`
17936	// NextLink - URL to get the next set of operation list results if there are any.
17937	NextLink *string `json:"nextLink,omitempty"`
17938}
17939
17940// ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
17941type ListVpnGatewaysResultIterator struct {
17942	i    int
17943	page ListVpnGatewaysResultPage
17944}
17945
17946// NextWithContext advances to the next value.  If there was an error making
17947// the request the iterator does not advance and the error is returned.
17948func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
17949	if tracing.IsEnabled() {
17950		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
17951		defer func() {
17952			sc := -1
17953			if iter.Response().Response.Response != nil {
17954				sc = iter.Response().Response.Response.StatusCode
17955			}
17956			tracing.EndSpan(ctx, sc, err)
17957		}()
17958	}
17959	iter.i++
17960	if iter.i < len(iter.page.Values()) {
17961		return nil
17962	}
17963	err = iter.page.NextWithContext(ctx)
17964	if err != nil {
17965		iter.i--
17966		return err
17967	}
17968	iter.i = 0
17969	return nil
17970}
17971
17972// Next advances to the next value.  If there was an error making
17973// the request the iterator does not advance and the error is returned.
17974// Deprecated: Use NextWithContext() instead.
17975func (iter *ListVpnGatewaysResultIterator) Next() error {
17976	return iter.NextWithContext(context.Background())
17977}
17978
17979// NotDone returns true if the enumeration should be started or is not yet complete.
17980func (iter ListVpnGatewaysResultIterator) NotDone() bool {
17981	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17982}
17983
17984// Response returns the raw server response from the last page request.
17985func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
17986	return iter.page.Response()
17987}
17988
17989// Value returns the current value or a zero-initialized value if the
17990// iterator has advanced beyond the end of the collection.
17991func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
17992	if !iter.page.NotDone() {
17993		return VpnGateway{}
17994	}
17995	return iter.page.Values()[iter.i]
17996}
17997
17998// Creates a new instance of the ListVpnGatewaysResultIterator type.
17999func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
18000	return ListVpnGatewaysResultIterator{page: page}
18001}
18002
18003// IsEmpty returns true if the ListResult contains no values.
18004func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
18005	return lvgr.Value == nil || len(*lvgr.Value) == 0
18006}
18007
18008// listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
18009// It returns nil if no more results exist.
18010func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
18011	if lvgr.NextLink == nil || len(to.String(lvgr.NextLink)) < 1 {
18012		return nil, nil
18013	}
18014	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18015		autorest.AsJSON(),
18016		autorest.AsGet(),
18017		autorest.WithBaseURL(to.String(lvgr.NextLink)))
18018}
18019
18020// ListVpnGatewaysResultPage contains a page of VpnGateway values.
18021type ListVpnGatewaysResultPage struct {
18022	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
18023	lvgr ListVpnGatewaysResult
18024}
18025
18026// NextWithContext advances to the next page of values.  If there was an error making
18027// the request the page does not advance and the error is returned.
18028func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
18029	if tracing.IsEnabled() {
18030		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
18031		defer func() {
18032			sc := -1
18033			if page.Response().Response.Response != nil {
18034				sc = page.Response().Response.Response.StatusCode
18035			}
18036			tracing.EndSpan(ctx, sc, err)
18037		}()
18038	}
18039	next, err := page.fn(ctx, page.lvgr)
18040	if err != nil {
18041		return err
18042	}
18043	page.lvgr = next
18044	return nil
18045}
18046
18047// Next advances to the next page of values.  If there was an error making
18048// the request the page does not advance and the error is returned.
18049// Deprecated: Use NextWithContext() instead.
18050func (page *ListVpnGatewaysResultPage) Next() error {
18051	return page.NextWithContext(context.Background())
18052}
18053
18054// NotDone returns true if the page enumeration should be started or is not yet complete.
18055func (page ListVpnGatewaysResultPage) NotDone() bool {
18056	return !page.lvgr.IsEmpty()
18057}
18058
18059// Response returns the raw server response from the last page request.
18060func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
18061	return page.lvgr
18062}
18063
18064// Values returns the slice of values for the current page or nil if there are no values.
18065func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
18066	if page.lvgr.IsEmpty() {
18067		return nil
18068	}
18069	return *page.lvgr.Value
18070}
18071
18072// Creates a new instance of the ListVpnGatewaysResultPage type.
18073func NewListVpnGatewaysResultPage(getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
18074	return ListVpnGatewaysResultPage{fn: getNextPage}
18075}
18076
18077// ListVpnSiteLinkConnectionsResult result of the request to list all vpn connections to a virtual wan vpn
18078// gateway. It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
18079type ListVpnSiteLinkConnectionsResult struct {
18080	autorest.Response `json:"-"`
18081	// Value - List of VpnSiteLinkConnections.
18082	Value *[]VpnSiteLinkConnection `json:"value,omitempty"`
18083	// NextLink - URL to get the next set of operation list results if there are any.
18084	NextLink *string `json:"nextLink,omitempty"`
18085}
18086
18087// ListVpnSiteLinkConnectionsResultIterator provides access to a complete listing of VpnSiteLinkConnection
18088// values.
18089type ListVpnSiteLinkConnectionsResultIterator struct {
18090	i    int
18091	page ListVpnSiteLinkConnectionsResultPage
18092}
18093
18094// NextWithContext advances to the next value.  If there was an error making
18095// the request the iterator does not advance and the error is returned.
18096func (iter *ListVpnSiteLinkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
18097	if tracing.IsEnabled() {
18098		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultIterator.NextWithContext")
18099		defer func() {
18100			sc := -1
18101			if iter.Response().Response.Response != nil {
18102				sc = iter.Response().Response.Response.StatusCode
18103			}
18104			tracing.EndSpan(ctx, sc, err)
18105		}()
18106	}
18107	iter.i++
18108	if iter.i < len(iter.page.Values()) {
18109		return nil
18110	}
18111	err = iter.page.NextWithContext(ctx)
18112	if err != nil {
18113		iter.i--
18114		return err
18115	}
18116	iter.i = 0
18117	return nil
18118}
18119
18120// Next advances to the next value.  If there was an error making
18121// the request the iterator does not advance and the error is returned.
18122// Deprecated: Use NextWithContext() instead.
18123func (iter *ListVpnSiteLinkConnectionsResultIterator) Next() error {
18124	return iter.NextWithContext(context.Background())
18125}
18126
18127// NotDone returns true if the enumeration should be started or is not yet complete.
18128func (iter ListVpnSiteLinkConnectionsResultIterator) NotDone() bool {
18129	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18130}
18131
18132// Response returns the raw server response from the last page request.
18133func (iter ListVpnSiteLinkConnectionsResultIterator) Response() ListVpnSiteLinkConnectionsResult {
18134	return iter.page.Response()
18135}
18136
18137// Value returns the current value or a zero-initialized value if the
18138// iterator has advanced beyond the end of the collection.
18139func (iter ListVpnSiteLinkConnectionsResultIterator) Value() VpnSiteLinkConnection {
18140	if !iter.page.NotDone() {
18141		return VpnSiteLinkConnection{}
18142	}
18143	return iter.page.Values()[iter.i]
18144}
18145
18146// Creates a new instance of the ListVpnSiteLinkConnectionsResultIterator type.
18147func NewListVpnSiteLinkConnectionsResultIterator(page ListVpnSiteLinkConnectionsResultPage) ListVpnSiteLinkConnectionsResultIterator {
18148	return ListVpnSiteLinkConnectionsResultIterator{page: page}
18149}
18150
18151// IsEmpty returns true if the ListResult contains no values.
18152func (lvslcr ListVpnSiteLinkConnectionsResult) IsEmpty() bool {
18153	return lvslcr.Value == nil || len(*lvslcr.Value) == 0
18154}
18155
18156// listVpnSiteLinkConnectionsResultPreparer prepares a request to retrieve the next set of results.
18157// It returns nil if no more results exist.
18158func (lvslcr ListVpnSiteLinkConnectionsResult) listVpnSiteLinkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
18159	if lvslcr.NextLink == nil || len(to.String(lvslcr.NextLink)) < 1 {
18160		return nil, nil
18161	}
18162	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18163		autorest.AsJSON(),
18164		autorest.AsGet(),
18165		autorest.WithBaseURL(to.String(lvslcr.NextLink)))
18166}
18167
18168// ListVpnSiteLinkConnectionsResultPage contains a page of VpnSiteLinkConnection values.
18169type ListVpnSiteLinkConnectionsResultPage struct {
18170	fn     func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)
18171	lvslcr ListVpnSiteLinkConnectionsResult
18172}
18173
18174// NextWithContext advances to the next page of values.  If there was an error making
18175// the request the page does not advance and the error is returned.
18176func (page *ListVpnSiteLinkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
18177	if tracing.IsEnabled() {
18178		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultPage.NextWithContext")
18179		defer func() {
18180			sc := -1
18181			if page.Response().Response.Response != nil {
18182				sc = page.Response().Response.Response.StatusCode
18183			}
18184			tracing.EndSpan(ctx, sc, err)
18185		}()
18186	}
18187	next, err := page.fn(ctx, page.lvslcr)
18188	if err != nil {
18189		return err
18190	}
18191	page.lvslcr = next
18192	return nil
18193}
18194
18195// Next advances to the next page of values.  If there was an error making
18196// the request the page does not advance and the error is returned.
18197// Deprecated: Use NextWithContext() instead.
18198func (page *ListVpnSiteLinkConnectionsResultPage) Next() error {
18199	return page.NextWithContext(context.Background())
18200}
18201
18202// NotDone returns true if the page enumeration should be started or is not yet complete.
18203func (page ListVpnSiteLinkConnectionsResultPage) NotDone() bool {
18204	return !page.lvslcr.IsEmpty()
18205}
18206
18207// Response returns the raw server response from the last page request.
18208func (page ListVpnSiteLinkConnectionsResultPage) Response() ListVpnSiteLinkConnectionsResult {
18209	return page.lvslcr
18210}
18211
18212// Values returns the slice of values for the current page or nil if there are no values.
18213func (page ListVpnSiteLinkConnectionsResultPage) Values() []VpnSiteLinkConnection {
18214	if page.lvslcr.IsEmpty() {
18215		return nil
18216	}
18217	return *page.lvslcr.Value
18218}
18219
18220// Creates a new instance of the ListVpnSiteLinkConnectionsResultPage type.
18221func NewListVpnSiteLinkConnectionsResultPage(getNextPage func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)) ListVpnSiteLinkConnectionsResultPage {
18222	return ListVpnSiteLinkConnectionsResultPage{fn: getNextPage}
18223}
18224
18225// ListVpnSiteLinksResult result of the request to list VpnSiteLinks. It contains a list of VpnSiteLinks
18226// and a URL nextLink to get the next set of results.
18227type ListVpnSiteLinksResult struct {
18228	autorest.Response `json:"-"`
18229	// Value - List of VpnSitesLinks.
18230	Value *[]VpnSiteLink `json:"value,omitempty"`
18231	// NextLink - URL to get the next set of operation list results if there are any.
18232	NextLink *string `json:"nextLink,omitempty"`
18233}
18234
18235// ListVpnSiteLinksResultIterator provides access to a complete listing of VpnSiteLink values.
18236type ListVpnSiteLinksResultIterator struct {
18237	i    int
18238	page ListVpnSiteLinksResultPage
18239}
18240
18241// NextWithContext advances to the next value.  If there was an error making
18242// the request the iterator does not advance and the error is returned.
18243func (iter *ListVpnSiteLinksResultIterator) NextWithContext(ctx context.Context) (err error) {
18244	if tracing.IsEnabled() {
18245		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultIterator.NextWithContext")
18246		defer func() {
18247			sc := -1
18248			if iter.Response().Response.Response != nil {
18249				sc = iter.Response().Response.Response.StatusCode
18250			}
18251			tracing.EndSpan(ctx, sc, err)
18252		}()
18253	}
18254	iter.i++
18255	if iter.i < len(iter.page.Values()) {
18256		return nil
18257	}
18258	err = iter.page.NextWithContext(ctx)
18259	if err != nil {
18260		iter.i--
18261		return err
18262	}
18263	iter.i = 0
18264	return nil
18265}
18266
18267// Next advances to the next value.  If there was an error making
18268// the request the iterator does not advance and the error is returned.
18269// Deprecated: Use NextWithContext() instead.
18270func (iter *ListVpnSiteLinksResultIterator) Next() error {
18271	return iter.NextWithContext(context.Background())
18272}
18273
18274// NotDone returns true if the enumeration should be started or is not yet complete.
18275func (iter ListVpnSiteLinksResultIterator) NotDone() bool {
18276	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18277}
18278
18279// Response returns the raw server response from the last page request.
18280func (iter ListVpnSiteLinksResultIterator) Response() ListVpnSiteLinksResult {
18281	return iter.page.Response()
18282}
18283
18284// Value returns the current value or a zero-initialized value if the
18285// iterator has advanced beyond the end of the collection.
18286func (iter ListVpnSiteLinksResultIterator) Value() VpnSiteLink {
18287	if !iter.page.NotDone() {
18288		return VpnSiteLink{}
18289	}
18290	return iter.page.Values()[iter.i]
18291}
18292
18293// Creates a new instance of the ListVpnSiteLinksResultIterator type.
18294func NewListVpnSiteLinksResultIterator(page ListVpnSiteLinksResultPage) ListVpnSiteLinksResultIterator {
18295	return ListVpnSiteLinksResultIterator{page: page}
18296}
18297
18298// IsEmpty returns true if the ListResult contains no values.
18299func (lvslr ListVpnSiteLinksResult) IsEmpty() bool {
18300	return lvslr.Value == nil || len(*lvslr.Value) == 0
18301}
18302
18303// listVpnSiteLinksResultPreparer prepares a request to retrieve the next set of results.
18304// It returns nil if no more results exist.
18305func (lvslr ListVpnSiteLinksResult) listVpnSiteLinksResultPreparer(ctx context.Context) (*http.Request, error) {
18306	if lvslr.NextLink == nil || len(to.String(lvslr.NextLink)) < 1 {
18307		return nil, nil
18308	}
18309	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18310		autorest.AsJSON(),
18311		autorest.AsGet(),
18312		autorest.WithBaseURL(to.String(lvslr.NextLink)))
18313}
18314
18315// ListVpnSiteLinksResultPage contains a page of VpnSiteLink values.
18316type ListVpnSiteLinksResultPage struct {
18317	fn    func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)
18318	lvslr ListVpnSiteLinksResult
18319}
18320
18321// NextWithContext advances to the next page of values.  If there was an error making
18322// the request the page does not advance and the error is returned.
18323func (page *ListVpnSiteLinksResultPage) NextWithContext(ctx context.Context) (err error) {
18324	if tracing.IsEnabled() {
18325		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultPage.NextWithContext")
18326		defer func() {
18327			sc := -1
18328			if page.Response().Response.Response != nil {
18329				sc = page.Response().Response.Response.StatusCode
18330			}
18331			tracing.EndSpan(ctx, sc, err)
18332		}()
18333	}
18334	next, err := page.fn(ctx, page.lvslr)
18335	if err != nil {
18336		return err
18337	}
18338	page.lvslr = next
18339	return nil
18340}
18341
18342// Next advances to the next page of values.  If there was an error making
18343// the request the page does not advance and the error is returned.
18344// Deprecated: Use NextWithContext() instead.
18345func (page *ListVpnSiteLinksResultPage) Next() error {
18346	return page.NextWithContext(context.Background())
18347}
18348
18349// NotDone returns true if the page enumeration should be started or is not yet complete.
18350func (page ListVpnSiteLinksResultPage) NotDone() bool {
18351	return !page.lvslr.IsEmpty()
18352}
18353
18354// Response returns the raw server response from the last page request.
18355func (page ListVpnSiteLinksResultPage) Response() ListVpnSiteLinksResult {
18356	return page.lvslr
18357}
18358
18359// Values returns the slice of values for the current page or nil if there are no values.
18360func (page ListVpnSiteLinksResultPage) Values() []VpnSiteLink {
18361	if page.lvslr.IsEmpty() {
18362		return nil
18363	}
18364	return *page.lvslr.Value
18365}
18366
18367// Creates a new instance of the ListVpnSiteLinksResultPage type.
18368func NewListVpnSiteLinksResultPage(getNextPage func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)) ListVpnSiteLinksResultPage {
18369	return ListVpnSiteLinksResultPage{fn: getNextPage}
18370}
18371
18372// ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
18373// nextLink to get the next set of results.
18374type ListVpnSitesResult struct {
18375	autorest.Response `json:"-"`
18376	// Value - List of VpnSites.
18377	Value *[]VpnSite `json:"value,omitempty"`
18378	// NextLink - URL to get the next set of operation list results if there are any.
18379	NextLink *string `json:"nextLink,omitempty"`
18380}
18381
18382// ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
18383type ListVpnSitesResultIterator struct {
18384	i    int
18385	page ListVpnSitesResultPage
18386}
18387
18388// NextWithContext advances to the next value.  If there was an error making
18389// the request the iterator does not advance and the error is returned.
18390func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
18391	if tracing.IsEnabled() {
18392		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
18393		defer func() {
18394			sc := -1
18395			if iter.Response().Response.Response != nil {
18396				sc = iter.Response().Response.Response.StatusCode
18397			}
18398			tracing.EndSpan(ctx, sc, err)
18399		}()
18400	}
18401	iter.i++
18402	if iter.i < len(iter.page.Values()) {
18403		return nil
18404	}
18405	err = iter.page.NextWithContext(ctx)
18406	if err != nil {
18407		iter.i--
18408		return err
18409	}
18410	iter.i = 0
18411	return nil
18412}
18413
18414// Next advances to the next value.  If there was an error making
18415// the request the iterator does not advance and the error is returned.
18416// Deprecated: Use NextWithContext() instead.
18417func (iter *ListVpnSitesResultIterator) Next() error {
18418	return iter.NextWithContext(context.Background())
18419}
18420
18421// NotDone returns true if the enumeration should be started or is not yet complete.
18422func (iter ListVpnSitesResultIterator) NotDone() bool {
18423	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18424}
18425
18426// Response returns the raw server response from the last page request.
18427func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
18428	return iter.page.Response()
18429}
18430
18431// Value returns the current value or a zero-initialized value if the
18432// iterator has advanced beyond the end of the collection.
18433func (iter ListVpnSitesResultIterator) Value() VpnSite {
18434	if !iter.page.NotDone() {
18435		return VpnSite{}
18436	}
18437	return iter.page.Values()[iter.i]
18438}
18439
18440// Creates a new instance of the ListVpnSitesResultIterator type.
18441func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
18442	return ListVpnSitesResultIterator{page: page}
18443}
18444
18445// IsEmpty returns true if the ListResult contains no values.
18446func (lvsr ListVpnSitesResult) IsEmpty() bool {
18447	return lvsr.Value == nil || len(*lvsr.Value) == 0
18448}
18449
18450// listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
18451// It returns nil if no more results exist.
18452func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
18453	if lvsr.NextLink == nil || len(to.String(lvsr.NextLink)) < 1 {
18454		return nil, nil
18455	}
18456	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18457		autorest.AsJSON(),
18458		autorest.AsGet(),
18459		autorest.WithBaseURL(to.String(lvsr.NextLink)))
18460}
18461
18462// ListVpnSitesResultPage contains a page of VpnSite values.
18463type ListVpnSitesResultPage struct {
18464	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
18465	lvsr ListVpnSitesResult
18466}
18467
18468// NextWithContext advances to the next page of values.  If there was an error making
18469// the request the page does not advance and the error is returned.
18470func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
18471	if tracing.IsEnabled() {
18472		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
18473		defer func() {
18474			sc := -1
18475			if page.Response().Response.Response != nil {
18476				sc = page.Response().Response.Response.StatusCode
18477			}
18478			tracing.EndSpan(ctx, sc, err)
18479		}()
18480	}
18481	next, err := page.fn(ctx, page.lvsr)
18482	if err != nil {
18483		return err
18484	}
18485	page.lvsr = next
18486	return nil
18487}
18488
18489// Next advances to the next page of values.  If there was an error making
18490// the request the page does not advance and the error is returned.
18491// Deprecated: Use NextWithContext() instead.
18492func (page *ListVpnSitesResultPage) Next() error {
18493	return page.NextWithContext(context.Background())
18494}
18495
18496// NotDone returns true if the page enumeration should be started or is not yet complete.
18497func (page ListVpnSitesResultPage) NotDone() bool {
18498	return !page.lvsr.IsEmpty()
18499}
18500
18501// Response returns the raw server response from the last page request.
18502func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
18503	return page.lvsr
18504}
18505
18506// Values returns the slice of values for the current page or nil if there are no values.
18507func (page ListVpnSitesResultPage) Values() []VpnSite {
18508	if page.lvsr.IsEmpty() {
18509		return nil
18510	}
18511	return *page.lvsr.Value
18512}
18513
18514// Creates a new instance of the ListVpnSitesResultPage type.
18515func NewListVpnSitesResultPage(getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
18516	return ListVpnSitesResultPage{fn: getNextPage}
18517}
18518
18519// LoadBalancer loadBalancer resource.
18520type LoadBalancer struct {
18521	autorest.Response `json:"-"`
18522	// Sku - The load balancer SKU.
18523	Sku *LoadBalancerSku `json:"sku,omitempty"`
18524	// LoadBalancerPropertiesFormat - Properties of load balancer.
18525	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
18526	// Etag - A unique read-only string that changes whenever the resource is updated.
18527	Etag *string `json:"etag,omitempty"`
18528	// ID - Resource ID.
18529	ID *string `json:"id,omitempty"`
18530	// Name - READ-ONLY; Resource name.
18531	Name *string `json:"name,omitempty"`
18532	// Type - READ-ONLY; Resource type.
18533	Type *string `json:"type,omitempty"`
18534	// Location - Resource location.
18535	Location *string `json:"location,omitempty"`
18536	// Tags - Resource tags.
18537	Tags map[string]*string `json:"tags"`
18538}
18539
18540// MarshalJSON is the custom marshaler for LoadBalancer.
18541func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
18542	objectMap := make(map[string]interface{})
18543	if lb.Sku != nil {
18544		objectMap["sku"] = lb.Sku
18545	}
18546	if lb.LoadBalancerPropertiesFormat != nil {
18547		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
18548	}
18549	if lb.Etag != nil {
18550		objectMap["etag"] = lb.Etag
18551	}
18552	if lb.ID != nil {
18553		objectMap["id"] = lb.ID
18554	}
18555	if lb.Location != nil {
18556		objectMap["location"] = lb.Location
18557	}
18558	if lb.Tags != nil {
18559		objectMap["tags"] = lb.Tags
18560	}
18561	return json.Marshal(objectMap)
18562}
18563
18564// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
18565func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
18566	var m map[string]*json.RawMessage
18567	err := json.Unmarshal(body, &m)
18568	if err != nil {
18569		return err
18570	}
18571	for k, v := range m {
18572		switch k {
18573		case "sku":
18574			if v != nil {
18575				var sku LoadBalancerSku
18576				err = json.Unmarshal(*v, &sku)
18577				if err != nil {
18578					return err
18579				}
18580				lb.Sku = &sku
18581			}
18582		case "properties":
18583			if v != nil {
18584				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
18585				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
18586				if err != nil {
18587					return err
18588				}
18589				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
18590			}
18591		case "etag":
18592			if v != nil {
18593				var etag string
18594				err = json.Unmarshal(*v, &etag)
18595				if err != nil {
18596					return err
18597				}
18598				lb.Etag = &etag
18599			}
18600		case "id":
18601			if v != nil {
18602				var ID string
18603				err = json.Unmarshal(*v, &ID)
18604				if err != nil {
18605					return err
18606				}
18607				lb.ID = &ID
18608			}
18609		case "name":
18610			if v != nil {
18611				var name string
18612				err = json.Unmarshal(*v, &name)
18613				if err != nil {
18614					return err
18615				}
18616				lb.Name = &name
18617			}
18618		case "type":
18619			if v != nil {
18620				var typeVar string
18621				err = json.Unmarshal(*v, &typeVar)
18622				if err != nil {
18623					return err
18624				}
18625				lb.Type = &typeVar
18626			}
18627		case "location":
18628			if v != nil {
18629				var location string
18630				err = json.Unmarshal(*v, &location)
18631				if err != nil {
18632					return err
18633				}
18634				lb.Location = &location
18635			}
18636		case "tags":
18637			if v != nil {
18638				var tags map[string]*string
18639				err = json.Unmarshal(*v, &tags)
18640				if err != nil {
18641					return err
18642				}
18643				lb.Tags = tags
18644			}
18645		}
18646	}
18647
18648	return nil
18649}
18650
18651// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
18652type LoadBalancerBackendAddressPoolListResult struct {
18653	autorest.Response `json:"-"`
18654	// Value - A list of backend address pools in a load balancer.
18655	Value *[]BackendAddressPool `json:"value,omitempty"`
18656	// NextLink - READ-ONLY; The URL to get the next set of results.
18657	NextLink *string `json:"nextLink,omitempty"`
18658}
18659
18660// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
18661// BackendAddressPool values.
18662type LoadBalancerBackendAddressPoolListResultIterator struct {
18663	i    int
18664	page LoadBalancerBackendAddressPoolListResultPage
18665}
18666
18667// NextWithContext advances to the next value.  If there was an error making
18668// the request the iterator does not advance and the error is returned.
18669func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
18670	if tracing.IsEnabled() {
18671		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
18672		defer func() {
18673			sc := -1
18674			if iter.Response().Response.Response != nil {
18675				sc = iter.Response().Response.Response.StatusCode
18676			}
18677			tracing.EndSpan(ctx, sc, err)
18678		}()
18679	}
18680	iter.i++
18681	if iter.i < len(iter.page.Values()) {
18682		return nil
18683	}
18684	err = iter.page.NextWithContext(ctx)
18685	if err != nil {
18686		iter.i--
18687		return err
18688	}
18689	iter.i = 0
18690	return nil
18691}
18692
18693// Next advances to the next value.  If there was an error making
18694// the request the iterator does not advance and the error is returned.
18695// Deprecated: Use NextWithContext() instead.
18696func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
18697	return iter.NextWithContext(context.Background())
18698}
18699
18700// NotDone returns true if the enumeration should be started or is not yet complete.
18701func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
18702	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18703}
18704
18705// Response returns the raw server response from the last page request.
18706func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
18707	return iter.page.Response()
18708}
18709
18710// Value returns the current value or a zero-initialized value if the
18711// iterator has advanced beyond the end of the collection.
18712func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
18713	if !iter.page.NotDone() {
18714		return BackendAddressPool{}
18715	}
18716	return iter.page.Values()[iter.i]
18717}
18718
18719// Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
18720func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
18721	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
18722}
18723
18724// IsEmpty returns true if the ListResult contains no values.
18725func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
18726	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
18727}
18728
18729// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
18730// It returns nil if no more results exist.
18731func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
18732	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
18733		return nil, nil
18734	}
18735	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18736		autorest.AsJSON(),
18737		autorest.AsGet(),
18738		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
18739}
18740
18741// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
18742type LoadBalancerBackendAddressPoolListResultPage struct {
18743	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
18744	lbbaplr LoadBalancerBackendAddressPoolListResult
18745}
18746
18747// NextWithContext advances to the next page of values.  If there was an error making
18748// the request the page does not advance and the error is returned.
18749func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
18750	if tracing.IsEnabled() {
18751		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
18752		defer func() {
18753			sc := -1
18754			if page.Response().Response.Response != nil {
18755				sc = page.Response().Response.Response.StatusCode
18756			}
18757			tracing.EndSpan(ctx, sc, err)
18758		}()
18759	}
18760	next, err := page.fn(ctx, page.lbbaplr)
18761	if err != nil {
18762		return err
18763	}
18764	page.lbbaplr = next
18765	return nil
18766}
18767
18768// Next advances to the next page of values.  If there was an error making
18769// the request the page does not advance and the error is returned.
18770// Deprecated: Use NextWithContext() instead.
18771func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
18772	return page.NextWithContext(context.Background())
18773}
18774
18775// NotDone returns true if the page enumeration should be started or is not yet complete.
18776func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
18777	return !page.lbbaplr.IsEmpty()
18778}
18779
18780// Response returns the raw server response from the last page request.
18781func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
18782	return page.lbbaplr
18783}
18784
18785// Values returns the slice of values for the current page or nil if there are no values.
18786func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
18787	if page.lbbaplr.IsEmpty() {
18788		return nil
18789	}
18790	return *page.lbbaplr.Value
18791}
18792
18793// Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
18794func NewLoadBalancerBackendAddressPoolListResultPage(getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
18795	return LoadBalancerBackendAddressPoolListResultPage{fn: getNextPage}
18796}
18797
18798// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
18799type LoadBalancerFrontendIPConfigurationListResult struct {
18800	autorest.Response `json:"-"`
18801	// Value - A list of frontend IP configurations in a load balancer.
18802	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
18803	// NextLink - READ-ONLY; The URL to get the next set of results.
18804	NextLink *string `json:"nextLink,omitempty"`
18805}
18806
18807// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
18808// FrontendIPConfiguration values.
18809type LoadBalancerFrontendIPConfigurationListResultIterator struct {
18810	i    int
18811	page LoadBalancerFrontendIPConfigurationListResultPage
18812}
18813
18814// NextWithContext advances to the next value.  If there was an error making
18815// the request the iterator does not advance and the error is returned.
18816func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
18817	if tracing.IsEnabled() {
18818		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
18819		defer func() {
18820			sc := -1
18821			if iter.Response().Response.Response != nil {
18822				sc = iter.Response().Response.Response.StatusCode
18823			}
18824			tracing.EndSpan(ctx, sc, err)
18825		}()
18826	}
18827	iter.i++
18828	if iter.i < len(iter.page.Values()) {
18829		return nil
18830	}
18831	err = iter.page.NextWithContext(ctx)
18832	if err != nil {
18833		iter.i--
18834		return err
18835	}
18836	iter.i = 0
18837	return nil
18838}
18839
18840// Next advances to the next value.  If there was an error making
18841// the request the iterator does not advance and the error is returned.
18842// Deprecated: Use NextWithContext() instead.
18843func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
18844	return iter.NextWithContext(context.Background())
18845}
18846
18847// NotDone returns true if the enumeration should be started or is not yet complete.
18848func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
18849	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18850}
18851
18852// Response returns the raw server response from the last page request.
18853func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
18854	return iter.page.Response()
18855}
18856
18857// Value returns the current value or a zero-initialized value if the
18858// iterator has advanced beyond the end of the collection.
18859func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
18860	if !iter.page.NotDone() {
18861		return FrontendIPConfiguration{}
18862	}
18863	return iter.page.Values()[iter.i]
18864}
18865
18866// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
18867func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
18868	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
18869}
18870
18871// IsEmpty returns true if the ListResult contains no values.
18872func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
18873	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
18874}
18875
18876// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
18877// It returns nil if no more results exist.
18878func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
18879	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
18880		return nil, nil
18881	}
18882	return autorest.Prepare((&http.Request{}).WithContext(ctx),
18883		autorest.AsJSON(),
18884		autorest.AsGet(),
18885		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
18886}
18887
18888// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
18889type LoadBalancerFrontendIPConfigurationListResultPage struct {
18890	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
18891	lbficlr LoadBalancerFrontendIPConfigurationListResult
18892}
18893
18894// NextWithContext advances to the next page of values.  If there was an error making
18895// the request the page does not advance and the error is returned.
18896func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
18897	if tracing.IsEnabled() {
18898		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
18899		defer func() {
18900			sc := -1
18901			if page.Response().Response.Response != nil {
18902				sc = page.Response().Response.Response.StatusCode
18903			}
18904			tracing.EndSpan(ctx, sc, err)
18905		}()
18906	}
18907	next, err := page.fn(ctx, page.lbficlr)
18908	if err != nil {
18909		return err
18910	}
18911	page.lbficlr = next
18912	return nil
18913}
18914
18915// Next advances to the next page of values.  If there was an error making
18916// the request the page does not advance and the error is returned.
18917// Deprecated: Use NextWithContext() instead.
18918func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
18919	return page.NextWithContext(context.Background())
18920}
18921
18922// NotDone returns true if the page enumeration should be started or is not yet complete.
18923func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
18924	return !page.lbficlr.IsEmpty()
18925}
18926
18927// Response returns the raw server response from the last page request.
18928func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
18929	return page.lbficlr
18930}
18931
18932// Values returns the slice of values for the current page or nil if there are no values.
18933func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
18934	if page.lbficlr.IsEmpty() {
18935		return nil
18936	}
18937	return *page.lbficlr.Value
18938}
18939
18940// Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
18941func NewLoadBalancerFrontendIPConfigurationListResultPage(getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
18942	return LoadBalancerFrontendIPConfigurationListResultPage{fn: getNextPage}
18943}
18944
18945// LoadBalancerListResult response for ListLoadBalancers API service call.
18946type LoadBalancerListResult struct {
18947	autorest.Response `json:"-"`
18948	// Value - A list of load balancers in a resource group.
18949	Value *[]LoadBalancer `json:"value,omitempty"`
18950	// NextLink - READ-ONLY; The URL to get the next set of results.
18951	NextLink *string `json:"nextLink,omitempty"`
18952}
18953
18954// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
18955type LoadBalancerListResultIterator struct {
18956	i    int
18957	page LoadBalancerListResultPage
18958}
18959
18960// NextWithContext advances to the next value.  If there was an error making
18961// the request the iterator does not advance and the error is returned.
18962func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
18963	if tracing.IsEnabled() {
18964		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
18965		defer func() {
18966			sc := -1
18967			if iter.Response().Response.Response != nil {
18968				sc = iter.Response().Response.Response.StatusCode
18969			}
18970			tracing.EndSpan(ctx, sc, err)
18971		}()
18972	}
18973	iter.i++
18974	if iter.i < len(iter.page.Values()) {
18975		return nil
18976	}
18977	err = iter.page.NextWithContext(ctx)
18978	if err != nil {
18979		iter.i--
18980		return err
18981	}
18982	iter.i = 0
18983	return nil
18984}
18985
18986// Next advances to the next value.  If there was an error making
18987// the request the iterator does not advance and the error is returned.
18988// Deprecated: Use NextWithContext() instead.
18989func (iter *LoadBalancerListResultIterator) Next() error {
18990	return iter.NextWithContext(context.Background())
18991}
18992
18993// NotDone returns true if the enumeration should be started or is not yet complete.
18994func (iter LoadBalancerListResultIterator) NotDone() bool {
18995	return iter.page.NotDone() && iter.i < len(iter.page.Values())
18996}
18997
18998// Response returns the raw server response from the last page request.
18999func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
19000	return iter.page.Response()
19001}
19002
19003// Value returns the current value or a zero-initialized value if the
19004// iterator has advanced beyond the end of the collection.
19005func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
19006	if !iter.page.NotDone() {
19007		return LoadBalancer{}
19008	}
19009	return iter.page.Values()[iter.i]
19010}
19011
19012// Creates a new instance of the LoadBalancerListResultIterator type.
19013func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
19014	return LoadBalancerListResultIterator{page: page}
19015}
19016
19017// IsEmpty returns true if the ListResult contains no values.
19018func (lblr LoadBalancerListResult) IsEmpty() bool {
19019	return lblr.Value == nil || len(*lblr.Value) == 0
19020}
19021
19022// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
19023// It returns nil if no more results exist.
19024func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
19025	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
19026		return nil, nil
19027	}
19028	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19029		autorest.AsJSON(),
19030		autorest.AsGet(),
19031		autorest.WithBaseURL(to.String(lblr.NextLink)))
19032}
19033
19034// LoadBalancerListResultPage contains a page of LoadBalancer values.
19035type LoadBalancerListResultPage struct {
19036	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
19037	lblr LoadBalancerListResult
19038}
19039
19040// NextWithContext advances to the next page of values.  If there was an error making
19041// the request the page does not advance and the error is returned.
19042func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
19043	if tracing.IsEnabled() {
19044		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
19045		defer func() {
19046			sc := -1
19047			if page.Response().Response.Response != nil {
19048				sc = page.Response().Response.Response.StatusCode
19049			}
19050			tracing.EndSpan(ctx, sc, err)
19051		}()
19052	}
19053	next, err := page.fn(ctx, page.lblr)
19054	if err != nil {
19055		return err
19056	}
19057	page.lblr = next
19058	return nil
19059}
19060
19061// Next advances to the next page of values.  If there was an error making
19062// the request the page does not advance and the error is returned.
19063// Deprecated: Use NextWithContext() instead.
19064func (page *LoadBalancerListResultPage) Next() error {
19065	return page.NextWithContext(context.Background())
19066}
19067
19068// NotDone returns true if the page enumeration should be started or is not yet complete.
19069func (page LoadBalancerListResultPage) NotDone() bool {
19070	return !page.lblr.IsEmpty()
19071}
19072
19073// Response returns the raw server response from the last page request.
19074func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
19075	return page.lblr
19076}
19077
19078// Values returns the slice of values for the current page or nil if there are no values.
19079func (page LoadBalancerListResultPage) Values() []LoadBalancer {
19080	if page.lblr.IsEmpty() {
19081		return nil
19082	}
19083	return *page.lblr.Value
19084}
19085
19086// Creates a new instance of the LoadBalancerListResultPage type.
19087func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
19088	return LoadBalancerListResultPage{fn: getNextPage}
19089}
19090
19091// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
19092type LoadBalancerLoadBalancingRuleListResult struct {
19093	autorest.Response `json:"-"`
19094	// Value - A list of load balancing rules in a load balancer.
19095	Value *[]LoadBalancingRule `json:"value,omitempty"`
19096	// NextLink - READ-ONLY; The URL to get the next set of results.
19097	NextLink *string `json:"nextLink,omitempty"`
19098}
19099
19100// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
19101// LoadBalancingRule values.
19102type LoadBalancerLoadBalancingRuleListResultIterator struct {
19103	i    int
19104	page LoadBalancerLoadBalancingRuleListResultPage
19105}
19106
19107// NextWithContext advances to the next value.  If there was an error making
19108// the request the iterator does not advance and the error is returned.
19109func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
19110	if tracing.IsEnabled() {
19111		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
19112		defer func() {
19113			sc := -1
19114			if iter.Response().Response.Response != nil {
19115				sc = iter.Response().Response.Response.StatusCode
19116			}
19117			tracing.EndSpan(ctx, sc, err)
19118		}()
19119	}
19120	iter.i++
19121	if iter.i < len(iter.page.Values()) {
19122		return nil
19123	}
19124	err = iter.page.NextWithContext(ctx)
19125	if err != nil {
19126		iter.i--
19127		return err
19128	}
19129	iter.i = 0
19130	return nil
19131}
19132
19133// Next advances to the next value.  If there was an error making
19134// the request the iterator does not advance and the error is returned.
19135// Deprecated: Use NextWithContext() instead.
19136func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
19137	return iter.NextWithContext(context.Background())
19138}
19139
19140// NotDone returns true if the enumeration should be started or is not yet complete.
19141func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
19142	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19143}
19144
19145// Response returns the raw server response from the last page request.
19146func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
19147	return iter.page.Response()
19148}
19149
19150// Value returns the current value or a zero-initialized value if the
19151// iterator has advanced beyond the end of the collection.
19152func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
19153	if !iter.page.NotDone() {
19154		return LoadBalancingRule{}
19155	}
19156	return iter.page.Values()[iter.i]
19157}
19158
19159// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
19160func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
19161	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
19162}
19163
19164// IsEmpty returns true if the ListResult contains no values.
19165func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
19166	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
19167}
19168
19169// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
19170// It returns nil if no more results exist.
19171func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
19172	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
19173		return nil, nil
19174	}
19175	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19176		autorest.AsJSON(),
19177		autorest.AsGet(),
19178		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
19179}
19180
19181// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
19182type LoadBalancerLoadBalancingRuleListResultPage struct {
19183	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
19184	lblbrlr LoadBalancerLoadBalancingRuleListResult
19185}
19186
19187// NextWithContext advances to the next page of values.  If there was an error making
19188// the request the page does not advance and the error is returned.
19189func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
19190	if tracing.IsEnabled() {
19191		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
19192		defer func() {
19193			sc := -1
19194			if page.Response().Response.Response != nil {
19195				sc = page.Response().Response.Response.StatusCode
19196			}
19197			tracing.EndSpan(ctx, sc, err)
19198		}()
19199	}
19200	next, err := page.fn(ctx, page.lblbrlr)
19201	if err != nil {
19202		return err
19203	}
19204	page.lblbrlr = next
19205	return nil
19206}
19207
19208// Next advances to the next page of values.  If there was an error making
19209// the request the page does not advance and the error is returned.
19210// Deprecated: Use NextWithContext() instead.
19211func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
19212	return page.NextWithContext(context.Background())
19213}
19214
19215// NotDone returns true if the page enumeration should be started or is not yet complete.
19216func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
19217	return !page.lblbrlr.IsEmpty()
19218}
19219
19220// Response returns the raw server response from the last page request.
19221func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
19222	return page.lblbrlr
19223}
19224
19225// Values returns the slice of values for the current page or nil if there are no values.
19226func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
19227	if page.lblbrlr.IsEmpty() {
19228		return nil
19229	}
19230	return *page.lblbrlr.Value
19231}
19232
19233// Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
19234func NewLoadBalancerLoadBalancingRuleListResultPage(getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
19235	return LoadBalancerLoadBalancingRuleListResultPage{fn: getNextPage}
19236}
19237
19238// LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
19239type LoadBalancerOutboundRuleListResult struct {
19240	autorest.Response `json:"-"`
19241	// Value - A list of outbound rules in a load balancer.
19242	Value *[]OutboundRule `json:"value,omitempty"`
19243	// NextLink - READ-ONLY; The URL to get the next set of results.
19244	NextLink *string `json:"nextLink,omitempty"`
19245}
19246
19247// LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
19248type LoadBalancerOutboundRuleListResultIterator struct {
19249	i    int
19250	page LoadBalancerOutboundRuleListResultPage
19251}
19252
19253// NextWithContext advances to the next value.  If there was an error making
19254// the request the iterator does not advance and the error is returned.
19255func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
19256	if tracing.IsEnabled() {
19257		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
19258		defer func() {
19259			sc := -1
19260			if iter.Response().Response.Response != nil {
19261				sc = iter.Response().Response.Response.StatusCode
19262			}
19263			tracing.EndSpan(ctx, sc, err)
19264		}()
19265	}
19266	iter.i++
19267	if iter.i < len(iter.page.Values()) {
19268		return nil
19269	}
19270	err = iter.page.NextWithContext(ctx)
19271	if err != nil {
19272		iter.i--
19273		return err
19274	}
19275	iter.i = 0
19276	return nil
19277}
19278
19279// Next advances to the next value.  If there was an error making
19280// the request the iterator does not advance and the error is returned.
19281// Deprecated: Use NextWithContext() instead.
19282func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
19283	return iter.NextWithContext(context.Background())
19284}
19285
19286// NotDone returns true if the enumeration should be started or is not yet complete.
19287func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
19288	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19289}
19290
19291// Response returns the raw server response from the last page request.
19292func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
19293	return iter.page.Response()
19294}
19295
19296// Value returns the current value or a zero-initialized value if the
19297// iterator has advanced beyond the end of the collection.
19298func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
19299	if !iter.page.NotDone() {
19300		return OutboundRule{}
19301	}
19302	return iter.page.Values()[iter.i]
19303}
19304
19305// Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
19306func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
19307	return LoadBalancerOutboundRuleListResultIterator{page: page}
19308}
19309
19310// IsEmpty returns true if the ListResult contains no values.
19311func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
19312	return lborlr.Value == nil || len(*lborlr.Value) == 0
19313}
19314
19315// loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
19316// It returns nil if no more results exist.
19317func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
19318	if lborlr.NextLink == nil || len(to.String(lborlr.NextLink)) < 1 {
19319		return nil, nil
19320	}
19321	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19322		autorest.AsJSON(),
19323		autorest.AsGet(),
19324		autorest.WithBaseURL(to.String(lborlr.NextLink)))
19325}
19326
19327// LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
19328type LoadBalancerOutboundRuleListResultPage struct {
19329	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
19330	lborlr LoadBalancerOutboundRuleListResult
19331}
19332
19333// NextWithContext advances to the next page of values.  If there was an error making
19334// the request the page does not advance and the error is returned.
19335func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
19336	if tracing.IsEnabled() {
19337		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
19338		defer func() {
19339			sc := -1
19340			if page.Response().Response.Response != nil {
19341				sc = page.Response().Response.Response.StatusCode
19342			}
19343			tracing.EndSpan(ctx, sc, err)
19344		}()
19345	}
19346	next, err := page.fn(ctx, page.lborlr)
19347	if err != nil {
19348		return err
19349	}
19350	page.lborlr = next
19351	return nil
19352}
19353
19354// Next advances to the next page of values.  If there was an error making
19355// the request the page does not advance and the error is returned.
19356// Deprecated: Use NextWithContext() instead.
19357func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
19358	return page.NextWithContext(context.Background())
19359}
19360
19361// NotDone returns true if the page enumeration should be started or is not yet complete.
19362func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
19363	return !page.lborlr.IsEmpty()
19364}
19365
19366// Response returns the raw server response from the last page request.
19367func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
19368	return page.lborlr
19369}
19370
19371// Values returns the slice of values for the current page or nil if there are no values.
19372func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
19373	if page.lborlr.IsEmpty() {
19374		return nil
19375	}
19376	return *page.lborlr.Value
19377}
19378
19379// Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
19380func NewLoadBalancerOutboundRuleListResultPage(getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
19381	return LoadBalancerOutboundRuleListResultPage{fn: getNextPage}
19382}
19383
19384// LoadBalancerProbeListResult response for ListProbe API service call.
19385type LoadBalancerProbeListResult struct {
19386	autorest.Response `json:"-"`
19387	// Value - A list of probes in a load balancer.
19388	Value *[]Probe `json:"value,omitempty"`
19389	// NextLink - READ-ONLY; The URL to get the next set of results.
19390	NextLink *string `json:"nextLink,omitempty"`
19391}
19392
19393// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
19394type LoadBalancerProbeListResultIterator struct {
19395	i    int
19396	page LoadBalancerProbeListResultPage
19397}
19398
19399// NextWithContext advances to the next value.  If there was an error making
19400// the request the iterator does not advance and the error is returned.
19401func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
19402	if tracing.IsEnabled() {
19403		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
19404		defer func() {
19405			sc := -1
19406			if iter.Response().Response.Response != nil {
19407				sc = iter.Response().Response.Response.StatusCode
19408			}
19409			tracing.EndSpan(ctx, sc, err)
19410		}()
19411	}
19412	iter.i++
19413	if iter.i < len(iter.page.Values()) {
19414		return nil
19415	}
19416	err = iter.page.NextWithContext(ctx)
19417	if err != nil {
19418		iter.i--
19419		return err
19420	}
19421	iter.i = 0
19422	return nil
19423}
19424
19425// Next advances to the next value.  If there was an error making
19426// the request the iterator does not advance and the error is returned.
19427// Deprecated: Use NextWithContext() instead.
19428func (iter *LoadBalancerProbeListResultIterator) Next() error {
19429	return iter.NextWithContext(context.Background())
19430}
19431
19432// NotDone returns true if the enumeration should be started or is not yet complete.
19433func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
19434	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19435}
19436
19437// Response returns the raw server response from the last page request.
19438func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
19439	return iter.page.Response()
19440}
19441
19442// Value returns the current value or a zero-initialized value if the
19443// iterator has advanced beyond the end of the collection.
19444func (iter LoadBalancerProbeListResultIterator) Value() Probe {
19445	if !iter.page.NotDone() {
19446		return Probe{}
19447	}
19448	return iter.page.Values()[iter.i]
19449}
19450
19451// Creates a new instance of the LoadBalancerProbeListResultIterator type.
19452func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
19453	return LoadBalancerProbeListResultIterator{page: page}
19454}
19455
19456// IsEmpty returns true if the ListResult contains no values.
19457func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
19458	return lbplr.Value == nil || len(*lbplr.Value) == 0
19459}
19460
19461// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
19462// It returns nil if no more results exist.
19463func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
19464	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
19465		return nil, nil
19466	}
19467	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19468		autorest.AsJSON(),
19469		autorest.AsGet(),
19470		autorest.WithBaseURL(to.String(lbplr.NextLink)))
19471}
19472
19473// LoadBalancerProbeListResultPage contains a page of Probe values.
19474type LoadBalancerProbeListResultPage struct {
19475	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
19476	lbplr LoadBalancerProbeListResult
19477}
19478
19479// NextWithContext advances to the next page of values.  If there was an error making
19480// the request the page does not advance and the error is returned.
19481func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
19482	if tracing.IsEnabled() {
19483		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
19484		defer func() {
19485			sc := -1
19486			if page.Response().Response.Response != nil {
19487				sc = page.Response().Response.Response.StatusCode
19488			}
19489			tracing.EndSpan(ctx, sc, err)
19490		}()
19491	}
19492	next, err := page.fn(ctx, page.lbplr)
19493	if err != nil {
19494		return err
19495	}
19496	page.lbplr = next
19497	return nil
19498}
19499
19500// Next advances to the next page of values.  If there was an error making
19501// the request the page does not advance and the error is returned.
19502// Deprecated: Use NextWithContext() instead.
19503func (page *LoadBalancerProbeListResultPage) Next() error {
19504	return page.NextWithContext(context.Background())
19505}
19506
19507// NotDone returns true if the page enumeration should be started or is not yet complete.
19508func (page LoadBalancerProbeListResultPage) NotDone() bool {
19509	return !page.lbplr.IsEmpty()
19510}
19511
19512// Response returns the raw server response from the last page request.
19513func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
19514	return page.lbplr
19515}
19516
19517// Values returns the slice of values for the current page or nil if there are no values.
19518func (page LoadBalancerProbeListResultPage) Values() []Probe {
19519	if page.lbplr.IsEmpty() {
19520		return nil
19521	}
19522	return *page.lbplr.Value
19523}
19524
19525// Creates a new instance of the LoadBalancerProbeListResultPage type.
19526func NewLoadBalancerProbeListResultPage(getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
19527	return LoadBalancerProbeListResultPage{fn: getNextPage}
19528}
19529
19530// LoadBalancerPropertiesFormat properties of the load balancer.
19531type LoadBalancerPropertiesFormat struct {
19532	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer.
19533	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
19534	// BackendAddressPools - Collection of backend address pools used by a load balancer.
19535	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
19536	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning.
19537	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
19538	// Probes - Collection of probe objects used in the load balancer.
19539	Probes *[]Probe `json:"probes,omitempty"`
19540	// 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.
19541	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
19542	// 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.
19543	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
19544	// OutboundRules - The outbound rules.
19545	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
19546	// ResourceGUID - The resource GUID property of the load balancer resource.
19547	ResourceGUID *string `json:"resourceGuid,omitempty"`
19548	// ProvisioningState - The provisioning state of the load balancer resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19549	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19550}
19551
19552// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
19553// long-running operation.
19554type LoadBalancersCreateOrUpdateFuture struct {
19555	azure.Future
19556}
19557
19558// Result returns the result of the asynchronous operation.
19559// If the operation has not completed it will return an error.
19560func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
19561	var done bool
19562	done, err = future.DoneWithContext(context.Background(), client)
19563	if err != nil {
19564		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
19565		return
19566	}
19567	if !done {
19568		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
19569		return
19570	}
19571	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19572	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
19573		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
19574		if err != nil {
19575			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
19576		}
19577	}
19578	return
19579}
19580
19581// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
19582// operation.
19583type LoadBalancersDeleteFuture struct {
19584	azure.Future
19585}
19586
19587// Result returns the result of the asynchronous operation.
19588// If the operation has not completed it will return an error.
19589func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
19590	var done bool
19591	done, err = future.DoneWithContext(context.Background(), client)
19592	if err != nil {
19593		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
19594		return
19595	}
19596	if !done {
19597		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
19598		return
19599	}
19600	ar.Response = future.Response()
19601	return
19602}
19603
19604// LoadBalancerSku SKU of a load balancer.
19605type LoadBalancerSku struct {
19606	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
19607	Name LoadBalancerSkuName `json:"name,omitempty"`
19608}
19609
19610// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
19611// operation.
19612type LoadBalancersUpdateTagsFuture 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 *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
19619	var done bool
19620	done, err = future.DoneWithContext(context.Background(), client)
19621	if err != nil {
19622		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
19623		return
19624	}
19625	if !done {
19626		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
19627		return
19628	}
19629	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
19630	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
19631		lb, err = client.UpdateTagsResponder(lb.Response.Response)
19632		if err != nil {
19633			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
19634		}
19635	}
19636	return
19637}
19638
19639// LoadBalancingRule a load balancing rule for a load balancer.
19640type LoadBalancingRule struct {
19641	autorest.Response `json:"-"`
19642	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
19643	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
19644	// 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.
19645	Name *string `json:"name,omitempty"`
19646	// Etag - A unique read-only string that changes whenever the resource is updated.
19647	Etag *string `json:"etag,omitempty"`
19648	// Type - READ-ONLY; Type of the resource.
19649	Type *string `json:"type,omitempty"`
19650	// ID - Resource ID.
19651	ID *string `json:"id,omitempty"`
19652}
19653
19654// MarshalJSON is the custom marshaler for LoadBalancingRule.
19655func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
19656	objectMap := make(map[string]interface{})
19657	if lbr.LoadBalancingRulePropertiesFormat != nil {
19658		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
19659	}
19660	if lbr.Name != nil {
19661		objectMap["name"] = lbr.Name
19662	}
19663	if lbr.Etag != nil {
19664		objectMap["etag"] = lbr.Etag
19665	}
19666	if lbr.ID != nil {
19667		objectMap["id"] = lbr.ID
19668	}
19669	return json.Marshal(objectMap)
19670}
19671
19672// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
19673func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
19674	var m map[string]*json.RawMessage
19675	err := json.Unmarshal(body, &m)
19676	if err != nil {
19677		return err
19678	}
19679	for k, v := range m {
19680		switch k {
19681		case "properties":
19682			if v != nil {
19683				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
19684				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
19685				if err != nil {
19686					return err
19687				}
19688				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
19689			}
19690		case "name":
19691			if v != nil {
19692				var name string
19693				err = json.Unmarshal(*v, &name)
19694				if err != nil {
19695					return err
19696				}
19697				lbr.Name = &name
19698			}
19699		case "etag":
19700			if v != nil {
19701				var etag string
19702				err = json.Unmarshal(*v, &etag)
19703				if err != nil {
19704					return err
19705				}
19706				lbr.Etag = &etag
19707			}
19708		case "type":
19709			if v != nil {
19710				var typeVar string
19711				err = json.Unmarshal(*v, &typeVar)
19712				if err != nil {
19713					return err
19714				}
19715				lbr.Type = &typeVar
19716			}
19717		case "id":
19718			if v != nil {
19719				var ID string
19720				err = json.Unmarshal(*v, &ID)
19721				if err != nil {
19722					return err
19723				}
19724				lbr.ID = &ID
19725			}
19726		}
19727	}
19728
19729	return nil
19730}
19731
19732// LoadBalancingRulePropertiesFormat properties of the load balancer.
19733type LoadBalancingRulePropertiesFormat struct {
19734	// FrontendIPConfiguration - A reference to frontend IP addresses.
19735	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
19736	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
19737	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
19738	// Probe - The reference of the load balancer probe used by the load balancing rule.
19739	Probe *SubResource `json:"probe,omitempty"`
19740	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
19741	Protocol TransportProtocol `json:"protocol,omitempty"`
19742	// LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
19743	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
19744	// 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".
19745	FrontendPort *int32 `json:"frontendPort,omitempty"`
19746	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port".
19747	BackendPort *int32 `json:"backendPort,omitempty"`
19748	// 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.
19749	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
19750	// 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.
19751	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
19752	// 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.
19753	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
19754	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
19755	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
19756	// ProvisioningState - The provisioning state of the load balancing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
19757	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
19758}
19759
19760// LocalNetworkGateway a common class for general resource information.
19761type LocalNetworkGateway struct {
19762	autorest.Response `json:"-"`
19763	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
19764	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
19765	// Etag - A unique read-only string that changes whenever the resource is updated.
19766	Etag *string `json:"etag,omitempty"`
19767	// ID - Resource ID.
19768	ID *string `json:"id,omitempty"`
19769	// Name - READ-ONLY; Resource name.
19770	Name *string `json:"name,omitempty"`
19771	// Type - READ-ONLY; Resource type.
19772	Type *string `json:"type,omitempty"`
19773	// Location - Resource location.
19774	Location *string `json:"location,omitempty"`
19775	// Tags - Resource tags.
19776	Tags map[string]*string `json:"tags"`
19777}
19778
19779// MarshalJSON is the custom marshaler for LocalNetworkGateway.
19780func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
19781	objectMap := make(map[string]interface{})
19782	if lng.LocalNetworkGatewayPropertiesFormat != nil {
19783		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
19784	}
19785	if lng.Etag != nil {
19786		objectMap["etag"] = lng.Etag
19787	}
19788	if lng.ID != nil {
19789		objectMap["id"] = lng.ID
19790	}
19791	if lng.Location != nil {
19792		objectMap["location"] = lng.Location
19793	}
19794	if lng.Tags != nil {
19795		objectMap["tags"] = lng.Tags
19796	}
19797	return json.Marshal(objectMap)
19798}
19799
19800// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
19801func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
19802	var m map[string]*json.RawMessage
19803	err := json.Unmarshal(body, &m)
19804	if err != nil {
19805		return err
19806	}
19807	for k, v := range m {
19808		switch k {
19809		case "properties":
19810			if v != nil {
19811				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
19812				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
19813				if err != nil {
19814					return err
19815				}
19816				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
19817			}
19818		case "etag":
19819			if v != nil {
19820				var etag string
19821				err = json.Unmarshal(*v, &etag)
19822				if err != nil {
19823					return err
19824				}
19825				lng.Etag = &etag
19826			}
19827		case "id":
19828			if v != nil {
19829				var ID string
19830				err = json.Unmarshal(*v, &ID)
19831				if err != nil {
19832					return err
19833				}
19834				lng.ID = &ID
19835			}
19836		case "name":
19837			if v != nil {
19838				var name string
19839				err = json.Unmarshal(*v, &name)
19840				if err != nil {
19841					return err
19842				}
19843				lng.Name = &name
19844			}
19845		case "type":
19846			if v != nil {
19847				var typeVar string
19848				err = json.Unmarshal(*v, &typeVar)
19849				if err != nil {
19850					return err
19851				}
19852				lng.Type = &typeVar
19853			}
19854		case "location":
19855			if v != nil {
19856				var location string
19857				err = json.Unmarshal(*v, &location)
19858				if err != nil {
19859					return err
19860				}
19861				lng.Location = &location
19862			}
19863		case "tags":
19864			if v != nil {
19865				var tags map[string]*string
19866				err = json.Unmarshal(*v, &tags)
19867				if err != nil {
19868					return err
19869				}
19870				lng.Tags = tags
19871			}
19872		}
19873	}
19874
19875	return nil
19876}
19877
19878// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
19879type LocalNetworkGatewayListResult struct {
19880	autorest.Response `json:"-"`
19881	// Value - A list of local network gateways that exists in a resource group.
19882	Value *[]LocalNetworkGateway `json:"value,omitempty"`
19883	// NextLink - READ-ONLY; The URL to get the next set of results.
19884	NextLink *string `json:"nextLink,omitempty"`
19885}
19886
19887// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
19888// values.
19889type LocalNetworkGatewayListResultIterator struct {
19890	i    int
19891	page LocalNetworkGatewayListResultPage
19892}
19893
19894// NextWithContext advances to the next value.  If there was an error making
19895// the request the iterator does not advance and the error is returned.
19896func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
19897	if tracing.IsEnabled() {
19898		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
19899		defer func() {
19900			sc := -1
19901			if iter.Response().Response.Response != nil {
19902				sc = iter.Response().Response.Response.StatusCode
19903			}
19904			tracing.EndSpan(ctx, sc, err)
19905		}()
19906	}
19907	iter.i++
19908	if iter.i < len(iter.page.Values()) {
19909		return nil
19910	}
19911	err = iter.page.NextWithContext(ctx)
19912	if err != nil {
19913		iter.i--
19914		return err
19915	}
19916	iter.i = 0
19917	return nil
19918}
19919
19920// Next advances to the next value.  If there was an error making
19921// the request the iterator does not advance and the error is returned.
19922// Deprecated: Use NextWithContext() instead.
19923func (iter *LocalNetworkGatewayListResultIterator) Next() error {
19924	return iter.NextWithContext(context.Background())
19925}
19926
19927// NotDone returns true if the enumeration should be started or is not yet complete.
19928func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
19929	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19930}
19931
19932// Response returns the raw server response from the last page request.
19933func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
19934	return iter.page.Response()
19935}
19936
19937// Value returns the current value or a zero-initialized value if the
19938// iterator has advanced beyond the end of the collection.
19939func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
19940	if !iter.page.NotDone() {
19941		return LocalNetworkGateway{}
19942	}
19943	return iter.page.Values()[iter.i]
19944}
19945
19946// Creates a new instance of the LocalNetworkGatewayListResultIterator type.
19947func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
19948	return LocalNetworkGatewayListResultIterator{page: page}
19949}
19950
19951// IsEmpty returns true if the ListResult contains no values.
19952func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
19953	return lnglr.Value == nil || len(*lnglr.Value) == 0
19954}
19955
19956// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
19957// It returns nil if no more results exist.
19958func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
19959	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
19960		return nil, nil
19961	}
19962	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19963		autorest.AsJSON(),
19964		autorest.AsGet(),
19965		autorest.WithBaseURL(to.String(lnglr.NextLink)))
19966}
19967
19968// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
19969type LocalNetworkGatewayListResultPage struct {
19970	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
19971	lnglr LocalNetworkGatewayListResult
19972}
19973
19974// NextWithContext advances to the next page of values.  If there was an error making
19975// the request the page does not advance and the error is returned.
19976func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
19977	if tracing.IsEnabled() {
19978		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
19979		defer func() {
19980			sc := -1
19981			if page.Response().Response.Response != nil {
19982				sc = page.Response().Response.Response.StatusCode
19983			}
19984			tracing.EndSpan(ctx, sc, err)
19985		}()
19986	}
19987	next, err := page.fn(ctx, page.lnglr)
19988	if err != nil {
19989		return err
19990	}
19991	page.lnglr = next
19992	return nil
19993}
19994
19995// Next advances to the next page of values.  If there was an error making
19996// the request the page does not advance and the error is returned.
19997// Deprecated: Use NextWithContext() instead.
19998func (page *LocalNetworkGatewayListResultPage) Next() error {
19999	return page.NextWithContext(context.Background())
20000}
20001
20002// NotDone returns true if the page enumeration should be started or is not yet complete.
20003func (page LocalNetworkGatewayListResultPage) NotDone() bool {
20004	return !page.lnglr.IsEmpty()
20005}
20006
20007// Response returns the raw server response from the last page request.
20008func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
20009	return page.lnglr
20010}
20011
20012// Values returns the slice of values for the current page or nil if there are no values.
20013func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
20014	if page.lnglr.IsEmpty() {
20015		return nil
20016	}
20017	return *page.lnglr.Value
20018}
20019
20020// Creates a new instance of the LocalNetworkGatewayListResultPage type.
20021func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
20022	return LocalNetworkGatewayListResultPage{fn: getNextPage}
20023}
20024
20025// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties.
20026type LocalNetworkGatewayPropertiesFormat struct {
20027	// LocalNetworkAddressSpace - Local network site address space.
20028	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
20029	// GatewayIPAddress - IP address of local network gateway.
20030	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
20031	// BgpSettings - Local network gateway's BGP speaker settings.
20032	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
20033	// ResourceGUID - The resource GUID property of the local network gateway resource.
20034	ResourceGUID *string `json:"resourceGuid,omitempty"`
20035	// ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20036	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20037}
20038
20039// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20040// long-running operation.
20041type LocalNetworkGatewaysCreateOrUpdateFuture struct {
20042	azure.Future
20043}
20044
20045// Result returns the result of the asynchronous operation.
20046// If the operation has not completed it will return an error.
20047func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
20048	var done bool
20049	done, err = future.DoneWithContext(context.Background(), client)
20050	if err != nil {
20051		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20052		return
20053	}
20054	if !done {
20055		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
20056		return
20057	}
20058	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20059	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
20060		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
20061		if err != nil {
20062			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
20063		}
20064	}
20065	return
20066}
20067
20068// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
20069// long-running operation.
20070type LocalNetworkGatewaysDeleteFuture struct {
20071	azure.Future
20072}
20073
20074// Result returns the result of the asynchronous operation.
20075// If the operation has not completed it will return an error.
20076func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
20077	var done bool
20078	done, err = future.DoneWithContext(context.Background(), client)
20079	if err != nil {
20080		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
20081		return
20082	}
20083	if !done {
20084		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
20085		return
20086	}
20087	ar.Response = future.Response()
20088	return
20089}
20090
20091// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
20092// long-running operation.
20093type LocalNetworkGatewaysUpdateTagsFuture struct {
20094	azure.Future
20095}
20096
20097// Result returns the result of the asynchronous operation.
20098// If the operation has not completed it will return an error.
20099func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
20100	var done bool
20101	done, err = future.DoneWithContext(context.Background(), client)
20102	if err != nil {
20103		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
20104		return
20105	}
20106	if !done {
20107		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
20108		return
20109	}
20110	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20111	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
20112		lng, err = client.UpdateTagsResponder(lng.Response.Response)
20113		if err != nil {
20114			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
20115		}
20116	}
20117	return
20118}
20119
20120// LogSpecification description of logging specification.
20121type LogSpecification struct {
20122	// Name - The name of the specification.
20123	Name *string `json:"name,omitempty"`
20124	// DisplayName - The display name of the specification.
20125	DisplayName *string `json:"displayName,omitempty"`
20126	// BlobDuration - Duration of the blob.
20127	BlobDuration *string `json:"blobDuration,omitempty"`
20128}
20129
20130// ManagedServiceIdentity identity for the resource.
20131type ManagedServiceIdentity struct {
20132	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
20133	PrincipalID *string `json:"principalId,omitempty"`
20134	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
20135	TenantID *string `json:"tenantId,omitempty"`
20136	// 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'
20137	Type ResourceIdentityType `json:"type,omitempty"`
20138	// 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}'.
20139	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
20140}
20141
20142// MarshalJSON is the custom marshaler for ManagedServiceIdentity.
20143func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
20144	objectMap := make(map[string]interface{})
20145	if msi.Type != "" {
20146		objectMap["type"] = msi.Type
20147	}
20148	if msi.UserAssignedIdentities != nil {
20149		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
20150	}
20151	return json.Marshal(objectMap)
20152}
20153
20154// ManagedServiceIdentityUserAssignedIdentitiesValue ...
20155type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
20156	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
20157	PrincipalID *string `json:"principalId,omitempty"`
20158	// ClientID - READ-ONLY; The client id of user assigned identity.
20159	ClientID *string `json:"clientId,omitempty"`
20160}
20161
20162// MatchCondition define match conditions.
20163type MatchCondition struct {
20164	// MatchVariables - List of match variables.
20165	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
20166	// Operator - Describes operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex'
20167	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
20168	// NegationConditon - Describes if this is negate condition or not.
20169	NegationConditon *bool `json:"negationConditon,omitempty"`
20170	// MatchValues - Match value.
20171	MatchValues *[]string `json:"matchValues,omitempty"`
20172	// Transforms - List of transforms.
20173	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
20174}
20175
20176// MatchedRule matched rule.
20177type MatchedRule struct {
20178	// RuleName - Name of the matched network security rule.
20179	RuleName *string `json:"ruleName,omitempty"`
20180	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
20181	Action *string `json:"action,omitempty"`
20182}
20183
20184// MatchVariable define match variables.
20185type MatchVariable struct {
20186	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
20187	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
20188	// Selector - Describes field of the matchVariable collection.
20189	Selector *string `json:"selector,omitempty"`
20190}
20191
20192// MetricSpecification description of metrics specification.
20193type MetricSpecification struct {
20194	// Name - The name of the metric.
20195	Name *string `json:"name,omitempty"`
20196	// DisplayName - The display name of the metric.
20197	DisplayName *string `json:"displayName,omitempty"`
20198	// DisplayDescription - The description of the metric.
20199	DisplayDescription *string `json:"displayDescription,omitempty"`
20200	// Unit - Units the metric to be displayed in.
20201	Unit *string `json:"unit,omitempty"`
20202	// AggregationType - The aggregation type.
20203	AggregationType *string `json:"aggregationType,omitempty"`
20204	// Availabilities - List of availability.
20205	Availabilities *[]Availability `json:"availabilities,omitempty"`
20206	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
20207	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
20208	// FillGapWithZero - Whether gaps would be filled with zeros.
20209	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
20210	// MetricFilterPattern - Pattern for the filter of the metric.
20211	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
20212	// Dimensions - List of dimensions.
20213	Dimensions *[]Dimension `json:"dimensions,omitempty"`
20214	// IsInternal - Whether the metric is internal.
20215	IsInternal *bool `json:"isInternal,omitempty"`
20216	// SourceMdmAccount - The source MDM account.
20217	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
20218	// SourceMdmNamespace - The source MDM namespace.
20219	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
20220	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
20221	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
20222}
20223
20224// NatGateway nat Gateway resource.
20225type NatGateway struct {
20226	autorest.Response `json:"-"`
20227	// Sku - The nat gateway SKU.
20228	Sku *NatGatewaySku `json:"sku,omitempty"`
20229	// NatGatewayPropertiesFormat - Nat Gateway properties.
20230	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
20231	// Zones - A list of availability zones denoting the zone in which Nat Gateway should be deployed.
20232	Zones *[]string `json:"zones,omitempty"`
20233	// Etag - A unique read-only string that changes whenever the resource is updated.
20234	Etag *string `json:"etag,omitempty"`
20235	// ID - Resource ID.
20236	ID *string `json:"id,omitempty"`
20237	// Name - READ-ONLY; Resource name.
20238	Name *string `json:"name,omitempty"`
20239	// Type - READ-ONLY; Resource type.
20240	Type *string `json:"type,omitempty"`
20241	// Location - Resource location.
20242	Location *string `json:"location,omitempty"`
20243	// Tags - Resource tags.
20244	Tags map[string]*string `json:"tags"`
20245}
20246
20247// MarshalJSON is the custom marshaler for NatGateway.
20248func (ng NatGateway) MarshalJSON() ([]byte, error) {
20249	objectMap := make(map[string]interface{})
20250	if ng.Sku != nil {
20251		objectMap["sku"] = ng.Sku
20252	}
20253	if ng.NatGatewayPropertiesFormat != nil {
20254		objectMap["properties"] = ng.NatGatewayPropertiesFormat
20255	}
20256	if ng.Zones != nil {
20257		objectMap["zones"] = ng.Zones
20258	}
20259	if ng.Etag != nil {
20260		objectMap["etag"] = ng.Etag
20261	}
20262	if ng.ID != nil {
20263		objectMap["id"] = ng.ID
20264	}
20265	if ng.Location != nil {
20266		objectMap["location"] = ng.Location
20267	}
20268	if ng.Tags != nil {
20269		objectMap["tags"] = ng.Tags
20270	}
20271	return json.Marshal(objectMap)
20272}
20273
20274// UnmarshalJSON is the custom unmarshaler for NatGateway struct.
20275func (ng *NatGateway) UnmarshalJSON(body []byte) error {
20276	var m map[string]*json.RawMessage
20277	err := json.Unmarshal(body, &m)
20278	if err != nil {
20279		return err
20280	}
20281	for k, v := range m {
20282		switch k {
20283		case "sku":
20284			if v != nil {
20285				var sku NatGatewaySku
20286				err = json.Unmarshal(*v, &sku)
20287				if err != nil {
20288					return err
20289				}
20290				ng.Sku = &sku
20291			}
20292		case "properties":
20293			if v != nil {
20294				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
20295				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
20296				if err != nil {
20297					return err
20298				}
20299				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
20300			}
20301		case "zones":
20302			if v != nil {
20303				var zones []string
20304				err = json.Unmarshal(*v, &zones)
20305				if err != nil {
20306					return err
20307				}
20308				ng.Zones = &zones
20309			}
20310		case "etag":
20311			if v != nil {
20312				var etag string
20313				err = json.Unmarshal(*v, &etag)
20314				if err != nil {
20315					return err
20316				}
20317				ng.Etag = &etag
20318			}
20319		case "id":
20320			if v != nil {
20321				var ID string
20322				err = json.Unmarshal(*v, &ID)
20323				if err != nil {
20324					return err
20325				}
20326				ng.ID = &ID
20327			}
20328		case "name":
20329			if v != nil {
20330				var name string
20331				err = json.Unmarshal(*v, &name)
20332				if err != nil {
20333					return err
20334				}
20335				ng.Name = &name
20336			}
20337		case "type":
20338			if v != nil {
20339				var typeVar string
20340				err = json.Unmarshal(*v, &typeVar)
20341				if err != nil {
20342					return err
20343				}
20344				ng.Type = &typeVar
20345			}
20346		case "location":
20347			if v != nil {
20348				var location string
20349				err = json.Unmarshal(*v, &location)
20350				if err != nil {
20351					return err
20352				}
20353				ng.Location = &location
20354			}
20355		case "tags":
20356			if v != nil {
20357				var tags map[string]*string
20358				err = json.Unmarshal(*v, &tags)
20359				if err != nil {
20360					return err
20361				}
20362				ng.Tags = tags
20363			}
20364		}
20365	}
20366
20367	return nil
20368}
20369
20370// NatGatewayListResult response for ListNatGateways API service call.
20371type NatGatewayListResult struct {
20372	autorest.Response `json:"-"`
20373	// Value - A list of Nat Gateways that exists in a resource group.
20374	Value *[]NatGateway `json:"value,omitempty"`
20375	// NextLink - The URL to get the next set of results.
20376	NextLink *string `json:"nextLink,omitempty"`
20377}
20378
20379// NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
20380type NatGatewayListResultIterator struct {
20381	i    int
20382	page NatGatewayListResultPage
20383}
20384
20385// NextWithContext advances to the next value.  If there was an error making
20386// the request the iterator does not advance and the error is returned.
20387func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
20388	if tracing.IsEnabled() {
20389		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
20390		defer func() {
20391			sc := -1
20392			if iter.Response().Response.Response != nil {
20393				sc = iter.Response().Response.Response.StatusCode
20394			}
20395			tracing.EndSpan(ctx, sc, err)
20396		}()
20397	}
20398	iter.i++
20399	if iter.i < len(iter.page.Values()) {
20400		return nil
20401	}
20402	err = iter.page.NextWithContext(ctx)
20403	if err != nil {
20404		iter.i--
20405		return err
20406	}
20407	iter.i = 0
20408	return nil
20409}
20410
20411// Next advances to the next value.  If there was an error making
20412// the request the iterator does not advance and the error is returned.
20413// Deprecated: Use NextWithContext() instead.
20414func (iter *NatGatewayListResultIterator) Next() error {
20415	return iter.NextWithContext(context.Background())
20416}
20417
20418// NotDone returns true if the enumeration should be started or is not yet complete.
20419func (iter NatGatewayListResultIterator) NotDone() bool {
20420	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20421}
20422
20423// Response returns the raw server response from the last page request.
20424func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
20425	return iter.page.Response()
20426}
20427
20428// Value returns the current value or a zero-initialized value if the
20429// iterator has advanced beyond the end of the collection.
20430func (iter NatGatewayListResultIterator) Value() NatGateway {
20431	if !iter.page.NotDone() {
20432		return NatGateway{}
20433	}
20434	return iter.page.Values()[iter.i]
20435}
20436
20437// Creates a new instance of the NatGatewayListResultIterator type.
20438func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
20439	return NatGatewayListResultIterator{page: page}
20440}
20441
20442// IsEmpty returns true if the ListResult contains no values.
20443func (nglr NatGatewayListResult) IsEmpty() bool {
20444	return nglr.Value == nil || len(*nglr.Value) == 0
20445}
20446
20447// natGatewayListResultPreparer prepares a request to retrieve the next set of results.
20448// It returns nil if no more results exist.
20449func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
20450	if nglr.NextLink == nil || len(to.String(nglr.NextLink)) < 1 {
20451		return nil, nil
20452	}
20453	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20454		autorest.AsJSON(),
20455		autorest.AsGet(),
20456		autorest.WithBaseURL(to.String(nglr.NextLink)))
20457}
20458
20459// NatGatewayListResultPage contains a page of NatGateway values.
20460type NatGatewayListResultPage struct {
20461	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
20462	nglr NatGatewayListResult
20463}
20464
20465// NextWithContext advances to the next page of values.  If there was an error making
20466// the request the page does not advance and the error is returned.
20467func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
20468	if tracing.IsEnabled() {
20469		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
20470		defer func() {
20471			sc := -1
20472			if page.Response().Response.Response != nil {
20473				sc = page.Response().Response.Response.StatusCode
20474			}
20475			tracing.EndSpan(ctx, sc, err)
20476		}()
20477	}
20478	next, err := page.fn(ctx, page.nglr)
20479	if err != nil {
20480		return err
20481	}
20482	page.nglr = next
20483	return nil
20484}
20485
20486// Next advances to the next page of values.  If there was an error making
20487// the request the page does not advance and the error is returned.
20488// Deprecated: Use NextWithContext() instead.
20489func (page *NatGatewayListResultPage) Next() error {
20490	return page.NextWithContext(context.Background())
20491}
20492
20493// NotDone returns true if the page enumeration should be started or is not yet complete.
20494func (page NatGatewayListResultPage) NotDone() bool {
20495	return !page.nglr.IsEmpty()
20496}
20497
20498// Response returns the raw server response from the last page request.
20499func (page NatGatewayListResultPage) Response() NatGatewayListResult {
20500	return page.nglr
20501}
20502
20503// Values returns the slice of values for the current page or nil if there are no values.
20504func (page NatGatewayListResultPage) Values() []NatGateway {
20505	if page.nglr.IsEmpty() {
20506		return nil
20507	}
20508	return *page.nglr.Value
20509}
20510
20511// Creates a new instance of the NatGatewayListResultPage type.
20512func NewNatGatewayListResultPage(getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
20513	return NatGatewayListResultPage{fn: getNextPage}
20514}
20515
20516// NatGatewayPropertiesFormat nat Gateway properties.
20517type NatGatewayPropertiesFormat struct {
20518	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
20519	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
20520	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
20521	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
20522	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
20523	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
20524	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
20525	Subnets *[]SubResource `json:"subnets,omitempty"`
20526	// ResourceGUID - The resource GUID property of the NAT gateway resource.
20527	ResourceGUID *string `json:"resourceGuid,omitempty"`
20528	// ProvisioningState - The provisioning state of the NAT gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20529	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20530}
20531
20532// NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
20533// long-running operation.
20534type NatGatewaysCreateOrUpdateFuture struct {
20535	azure.Future
20536}
20537
20538// Result returns the result of the asynchronous operation.
20539// If the operation has not completed it will return an error.
20540func (future *NatGatewaysCreateOrUpdateFuture) Result(client NatGatewaysClient) (ng NatGateway, err error) {
20541	var done bool
20542	done, err = future.DoneWithContext(context.Background(), client)
20543	if err != nil {
20544		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
20545		return
20546	}
20547	if !done {
20548		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
20549		return
20550	}
20551	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20552	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
20553		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
20554		if err != nil {
20555			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
20556		}
20557	}
20558	return
20559}
20560
20561// NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
20562// operation.
20563type NatGatewaysDeleteFuture struct {
20564	azure.Future
20565}
20566
20567// Result returns the result of the asynchronous operation.
20568// If the operation has not completed it will return an error.
20569func (future *NatGatewaysDeleteFuture) Result(client NatGatewaysClient) (ar autorest.Response, err error) {
20570	var done bool
20571	done, err = future.DoneWithContext(context.Background(), client)
20572	if err != nil {
20573		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
20574		return
20575	}
20576	if !done {
20577		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
20578		return
20579	}
20580	ar.Response = future.Response()
20581	return
20582}
20583
20584// NatGatewaySku SKU of nat gateway.
20585type NatGatewaySku struct {
20586	// Name - Name of Nat Gateway SKU. Possible values include: 'Standard'
20587	Name NatGatewaySkuName `json:"name,omitempty"`
20588}
20589
20590// NextHopParameters parameters that define the source and destination endpoint.
20591type NextHopParameters struct {
20592	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
20593	TargetResourceID *string `json:"targetResourceId,omitempty"`
20594	// SourceIPAddress - The source IP address.
20595	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
20596	// DestinationIPAddress - The destination IP address.
20597	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
20598	// 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).
20599	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
20600}
20601
20602// NextHopResult the information about next hop from the specified VM.
20603type NextHopResult struct {
20604	autorest.Response `json:"-"`
20605	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
20606	NextHopType NextHopType `json:"nextHopType,omitempty"`
20607	// NextHopIPAddress - Next hop IP Address.
20608	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
20609	// 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'.
20610	RouteTableID *string `json:"routeTableId,omitempty"`
20611}
20612
20613// Operation network REST API operation definition.
20614type Operation struct {
20615	// Name - Operation name: {provider}/{resource}/{operation}.
20616	Name *string `json:"name,omitempty"`
20617	// Display - Display metadata associated with the operation.
20618	Display *OperationDisplay `json:"display,omitempty"`
20619	// Origin - Origin of the operation.
20620	Origin *string `json:"origin,omitempty"`
20621	// OperationPropertiesFormat - Operation properties format.
20622	*OperationPropertiesFormat `json:"properties,omitempty"`
20623}
20624
20625// MarshalJSON is the custom marshaler for Operation.
20626func (o Operation) MarshalJSON() ([]byte, error) {
20627	objectMap := make(map[string]interface{})
20628	if o.Name != nil {
20629		objectMap["name"] = o.Name
20630	}
20631	if o.Display != nil {
20632		objectMap["display"] = o.Display
20633	}
20634	if o.Origin != nil {
20635		objectMap["origin"] = o.Origin
20636	}
20637	if o.OperationPropertiesFormat != nil {
20638		objectMap["properties"] = o.OperationPropertiesFormat
20639	}
20640	return json.Marshal(objectMap)
20641}
20642
20643// UnmarshalJSON is the custom unmarshaler for Operation struct.
20644func (o *Operation) UnmarshalJSON(body []byte) error {
20645	var m map[string]*json.RawMessage
20646	err := json.Unmarshal(body, &m)
20647	if err != nil {
20648		return err
20649	}
20650	for k, v := range m {
20651		switch k {
20652		case "name":
20653			if v != nil {
20654				var name string
20655				err = json.Unmarshal(*v, &name)
20656				if err != nil {
20657					return err
20658				}
20659				o.Name = &name
20660			}
20661		case "display":
20662			if v != nil {
20663				var display OperationDisplay
20664				err = json.Unmarshal(*v, &display)
20665				if err != nil {
20666					return err
20667				}
20668				o.Display = &display
20669			}
20670		case "origin":
20671			if v != nil {
20672				var origin string
20673				err = json.Unmarshal(*v, &origin)
20674				if err != nil {
20675					return err
20676				}
20677				o.Origin = &origin
20678			}
20679		case "properties":
20680			if v != nil {
20681				var operationPropertiesFormat OperationPropertiesFormat
20682				err = json.Unmarshal(*v, &operationPropertiesFormat)
20683				if err != nil {
20684					return err
20685				}
20686				o.OperationPropertiesFormat = &operationPropertiesFormat
20687			}
20688		}
20689	}
20690
20691	return nil
20692}
20693
20694// OperationDisplay display metadata associated with the operation.
20695type OperationDisplay struct {
20696	// Provider - Service provider: Microsoft Network.
20697	Provider *string `json:"provider,omitempty"`
20698	// Resource - Resource on which the operation is performed.
20699	Resource *string `json:"resource,omitempty"`
20700	// Operation - Type of the operation: get, read, delete, etc.
20701	Operation *string `json:"operation,omitempty"`
20702	// Description - Description of the operation.
20703	Description *string `json:"description,omitempty"`
20704}
20705
20706// OperationListResult result of the request to list Network operations. It contains a list of operations
20707// and a URL link to get the next set of results.
20708type OperationListResult struct {
20709	autorest.Response `json:"-"`
20710	// Value - List of Network operations supported by the Network resource provider.
20711	Value *[]Operation `json:"value,omitempty"`
20712	// NextLink - URL to get the next set of operation list results if there are any.
20713	NextLink *string `json:"nextLink,omitempty"`
20714}
20715
20716// OperationListResultIterator provides access to a complete listing of Operation values.
20717type OperationListResultIterator struct {
20718	i    int
20719	page OperationListResultPage
20720}
20721
20722// NextWithContext advances to the next value.  If there was an error making
20723// the request the iterator does not advance and the error is returned.
20724func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
20725	if tracing.IsEnabled() {
20726		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
20727		defer func() {
20728			sc := -1
20729			if iter.Response().Response.Response != nil {
20730				sc = iter.Response().Response.Response.StatusCode
20731			}
20732			tracing.EndSpan(ctx, sc, err)
20733		}()
20734	}
20735	iter.i++
20736	if iter.i < len(iter.page.Values()) {
20737		return nil
20738	}
20739	err = iter.page.NextWithContext(ctx)
20740	if err != nil {
20741		iter.i--
20742		return err
20743	}
20744	iter.i = 0
20745	return nil
20746}
20747
20748// Next advances to the next value.  If there was an error making
20749// the request the iterator does not advance and the error is returned.
20750// Deprecated: Use NextWithContext() instead.
20751func (iter *OperationListResultIterator) Next() error {
20752	return iter.NextWithContext(context.Background())
20753}
20754
20755// NotDone returns true if the enumeration should be started or is not yet complete.
20756func (iter OperationListResultIterator) NotDone() bool {
20757	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20758}
20759
20760// Response returns the raw server response from the last page request.
20761func (iter OperationListResultIterator) Response() OperationListResult {
20762	return iter.page.Response()
20763}
20764
20765// Value returns the current value or a zero-initialized value if the
20766// iterator has advanced beyond the end of the collection.
20767func (iter OperationListResultIterator) Value() Operation {
20768	if !iter.page.NotDone() {
20769		return Operation{}
20770	}
20771	return iter.page.Values()[iter.i]
20772}
20773
20774// Creates a new instance of the OperationListResultIterator type.
20775func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
20776	return OperationListResultIterator{page: page}
20777}
20778
20779// IsEmpty returns true if the ListResult contains no values.
20780func (olr OperationListResult) IsEmpty() bool {
20781	return olr.Value == nil || len(*olr.Value) == 0
20782}
20783
20784// operationListResultPreparer prepares a request to retrieve the next set of results.
20785// It returns nil if no more results exist.
20786func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
20787	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
20788		return nil, nil
20789	}
20790	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20791		autorest.AsJSON(),
20792		autorest.AsGet(),
20793		autorest.WithBaseURL(to.String(olr.NextLink)))
20794}
20795
20796// OperationListResultPage contains a page of Operation values.
20797type OperationListResultPage struct {
20798	fn  func(context.Context, OperationListResult) (OperationListResult, error)
20799	olr OperationListResult
20800}
20801
20802// NextWithContext advances to the next page of values.  If there was an error making
20803// the request the page does not advance and the error is returned.
20804func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
20805	if tracing.IsEnabled() {
20806		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
20807		defer func() {
20808			sc := -1
20809			if page.Response().Response.Response != nil {
20810				sc = page.Response().Response.Response.StatusCode
20811			}
20812			tracing.EndSpan(ctx, sc, err)
20813		}()
20814	}
20815	next, err := page.fn(ctx, page.olr)
20816	if err != nil {
20817		return err
20818	}
20819	page.olr = next
20820	return nil
20821}
20822
20823// Next advances to the next page of values.  If there was an error making
20824// the request the page does not advance and the error is returned.
20825// Deprecated: Use NextWithContext() instead.
20826func (page *OperationListResultPage) Next() error {
20827	return page.NextWithContext(context.Background())
20828}
20829
20830// NotDone returns true if the page enumeration should be started or is not yet complete.
20831func (page OperationListResultPage) NotDone() bool {
20832	return !page.olr.IsEmpty()
20833}
20834
20835// Response returns the raw server response from the last page request.
20836func (page OperationListResultPage) Response() OperationListResult {
20837	return page.olr
20838}
20839
20840// Values returns the slice of values for the current page or nil if there are no values.
20841func (page OperationListResultPage) Values() []Operation {
20842	if page.olr.IsEmpty() {
20843		return nil
20844	}
20845	return *page.olr.Value
20846}
20847
20848// Creates a new instance of the OperationListResultPage type.
20849func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
20850	return OperationListResultPage{fn: getNextPage}
20851}
20852
20853// OperationPropertiesFormat description of operation properties format.
20854type OperationPropertiesFormat struct {
20855	// ServiceSpecification - Specification of the service.
20856	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
20857}
20858
20859// OperationPropertiesFormatServiceSpecification specification of the service.
20860type OperationPropertiesFormatServiceSpecification struct {
20861	// MetricSpecifications - Operation service specification.
20862	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
20863	// LogSpecifications - Operation log specification.
20864	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
20865}
20866
20867// OutboundRule outbound rule of the load balancer.
20868type OutboundRule struct {
20869	autorest.Response `json:"-"`
20870	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
20871	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
20872	// 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.
20873	Name *string `json:"name,omitempty"`
20874	// Etag - A unique read-only string that changes whenever the resource is updated.
20875	Etag *string `json:"etag,omitempty"`
20876	// Type - READ-ONLY; Type of the resource.
20877	Type *string `json:"type,omitempty"`
20878	// ID - Resource ID.
20879	ID *string `json:"id,omitempty"`
20880}
20881
20882// MarshalJSON is the custom marshaler for OutboundRule.
20883func (or OutboundRule) MarshalJSON() ([]byte, error) {
20884	objectMap := make(map[string]interface{})
20885	if or.OutboundRulePropertiesFormat != nil {
20886		objectMap["properties"] = or.OutboundRulePropertiesFormat
20887	}
20888	if or.Name != nil {
20889		objectMap["name"] = or.Name
20890	}
20891	if or.Etag != nil {
20892		objectMap["etag"] = or.Etag
20893	}
20894	if or.ID != nil {
20895		objectMap["id"] = or.ID
20896	}
20897	return json.Marshal(objectMap)
20898}
20899
20900// UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
20901func (or *OutboundRule) UnmarshalJSON(body []byte) error {
20902	var m map[string]*json.RawMessage
20903	err := json.Unmarshal(body, &m)
20904	if err != nil {
20905		return err
20906	}
20907	for k, v := range m {
20908		switch k {
20909		case "properties":
20910			if v != nil {
20911				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
20912				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
20913				if err != nil {
20914					return err
20915				}
20916				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
20917			}
20918		case "name":
20919			if v != nil {
20920				var name string
20921				err = json.Unmarshal(*v, &name)
20922				if err != nil {
20923					return err
20924				}
20925				or.Name = &name
20926			}
20927		case "etag":
20928			if v != nil {
20929				var etag string
20930				err = json.Unmarshal(*v, &etag)
20931				if err != nil {
20932					return err
20933				}
20934				or.Etag = &etag
20935			}
20936		case "type":
20937			if v != nil {
20938				var typeVar string
20939				err = json.Unmarshal(*v, &typeVar)
20940				if err != nil {
20941					return err
20942				}
20943				or.Type = &typeVar
20944			}
20945		case "id":
20946			if v != nil {
20947				var ID string
20948				err = json.Unmarshal(*v, &ID)
20949				if err != nil {
20950					return err
20951				}
20952				or.ID = &ID
20953			}
20954		}
20955	}
20956
20957	return nil
20958}
20959
20960// OutboundRulePropertiesFormat outbound rule of the load balancer.
20961type OutboundRulePropertiesFormat struct {
20962	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
20963	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
20964	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
20965	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
20966	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
20967	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
20968	// ProvisioningState - The provisioning state of the outbound rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
20969	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
20970	// Protocol - The protocol for the outbound rule in load balancer. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
20971	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
20972	// 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.
20973	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
20974	// IdleTimeoutInMinutes - The timeout for the TCP idle connection.
20975	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
20976}
20977
20978// P2SVpnGateway p2SVpnGateway Resource.
20979type P2SVpnGateway struct {
20980	autorest.Response `json:"-"`
20981	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
20982	*P2SVpnGatewayProperties `json:"properties,omitempty"`
20983	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
20984	Etag *string `json:"etag,omitempty"`
20985	// ID - Resource ID.
20986	ID *string `json:"id,omitempty"`
20987	// Name - READ-ONLY; Resource name.
20988	Name *string `json:"name,omitempty"`
20989	// Type - READ-ONLY; Resource type.
20990	Type *string `json:"type,omitempty"`
20991	// Location - Resource location.
20992	Location *string `json:"location,omitempty"`
20993	// Tags - Resource tags.
20994	Tags map[string]*string `json:"tags"`
20995}
20996
20997// MarshalJSON is the custom marshaler for P2SVpnGateway.
20998func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
20999	objectMap := make(map[string]interface{})
21000	if pvg.P2SVpnGatewayProperties != nil {
21001		objectMap["properties"] = pvg.P2SVpnGatewayProperties
21002	}
21003	if pvg.ID != nil {
21004		objectMap["id"] = pvg.ID
21005	}
21006	if pvg.Location != nil {
21007		objectMap["location"] = pvg.Location
21008	}
21009	if pvg.Tags != nil {
21010		objectMap["tags"] = pvg.Tags
21011	}
21012	return json.Marshal(objectMap)
21013}
21014
21015// UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
21016func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
21017	var m map[string]*json.RawMessage
21018	err := json.Unmarshal(body, &m)
21019	if err != nil {
21020		return err
21021	}
21022	for k, v := range m {
21023		switch k {
21024		case "properties":
21025			if v != nil {
21026				var p2SVpnGatewayProperties P2SVpnGatewayProperties
21027				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
21028				if err != nil {
21029					return err
21030				}
21031				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
21032			}
21033		case "etag":
21034			if v != nil {
21035				var etag string
21036				err = json.Unmarshal(*v, &etag)
21037				if err != nil {
21038					return err
21039				}
21040				pvg.Etag = &etag
21041			}
21042		case "id":
21043			if v != nil {
21044				var ID string
21045				err = json.Unmarshal(*v, &ID)
21046				if err != nil {
21047					return err
21048				}
21049				pvg.ID = &ID
21050			}
21051		case "name":
21052			if v != nil {
21053				var name string
21054				err = json.Unmarshal(*v, &name)
21055				if err != nil {
21056					return err
21057				}
21058				pvg.Name = &name
21059			}
21060		case "type":
21061			if v != nil {
21062				var typeVar string
21063				err = json.Unmarshal(*v, &typeVar)
21064				if err != nil {
21065					return err
21066				}
21067				pvg.Type = &typeVar
21068			}
21069		case "location":
21070			if v != nil {
21071				var location string
21072				err = json.Unmarshal(*v, &location)
21073				if err != nil {
21074					return err
21075				}
21076				pvg.Location = &location
21077			}
21078		case "tags":
21079			if v != nil {
21080				var tags map[string]*string
21081				err = json.Unmarshal(*v, &tags)
21082				if err != nil {
21083					return err
21084				}
21085				pvg.Tags = tags
21086			}
21087		}
21088	}
21089
21090	return nil
21091}
21092
21093// P2SVpnGatewayProperties parameters for P2SVpnGateway.
21094type P2SVpnGatewayProperties struct {
21095	// VirtualHub - The VirtualHub to which the gateway belongs.
21096	VirtualHub *SubResource `json:"virtualHub,omitempty"`
21097	// ProvisioningState - The provisioning state of the P2S VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21098	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21099	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
21100	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
21101	// P2SVpnServerConfiguration - The P2SVpnServerConfiguration to which the p2sVpnGateway is attached to.
21102	P2SVpnServerConfiguration *SubResource `json:"p2SVpnServerConfiguration,omitempty"`
21103	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
21104	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
21105	// CustomRoutes - The reference of the address space resource which represents the custom routes specified by the customer for P2SVpnGateway and P2S VpnClient.
21106	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
21107	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
21108	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
21109}
21110
21111// P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
21112// long-running operation.
21113type P2sVpnGatewaysCreateOrUpdateFuture struct {
21114	azure.Future
21115}
21116
21117// Result returns the result of the asynchronous operation.
21118// If the operation has not completed it will return an error.
21119func (future *P2sVpnGatewaysCreateOrUpdateFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
21120	var done bool
21121	done, err = future.DoneWithContext(context.Background(), client)
21122	if err != nil {
21123		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21124		return
21125	}
21126	if !done {
21127		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
21128		return
21129	}
21130	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21131	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
21132		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
21133		if err != nil {
21134			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
21135		}
21136	}
21137	return
21138}
21139
21140// P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21141// operation.
21142type P2sVpnGatewaysDeleteFuture struct {
21143	azure.Future
21144}
21145
21146// Result returns the result of the asynchronous operation.
21147// If the operation has not completed it will return an error.
21148func (future *P2sVpnGatewaysDeleteFuture) Result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
21149	var done bool
21150	done, err = future.DoneWithContext(context.Background(), client)
21151	if err != nil {
21152		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
21153		return
21154	}
21155	if !done {
21156		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
21157		return
21158	}
21159	ar.Response = future.Response()
21160	return
21161}
21162
21163// P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
21164// long-running operation.
21165type P2sVpnGatewaysGenerateVpnProfileFuture struct {
21166	azure.Future
21167}
21168
21169// Result returns the result of the asynchronous operation.
21170// If the operation has not completed it will return an error.
21171func (future *P2sVpnGatewaysGenerateVpnProfileFuture) Result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
21172	var done bool
21173	done, err = future.DoneWithContext(context.Background(), client)
21174	if err != nil {
21175		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
21176		return
21177	}
21178	if !done {
21179		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
21180		return
21181	}
21182	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21183	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
21184		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
21185		if err != nil {
21186			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
21187		}
21188	}
21189	return
21190}
21191
21192// P2sVpnGatewaysGetP2sVpnConnectionHealthFuture an abstraction for monitoring and retrieving the results
21193// of a long-running operation.
21194type P2sVpnGatewaysGetP2sVpnConnectionHealthFuture struct {
21195	azure.Future
21196}
21197
21198// Result returns the result of the asynchronous operation.
21199// If the operation has not completed it will return an error.
21200func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
21201	var done bool
21202	done, err = future.DoneWithContext(context.Background(), client)
21203	if err != nil {
21204		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", future.Response(), "Polling failure")
21205		return
21206	}
21207	if !done {
21208		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture")
21209		return
21210	}
21211	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21212	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
21213		pvg, err = client.GetP2sVpnConnectionHealthResponder(pvg.Response.Response)
21214		if err != nil {
21215			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", pvg.Response.Response, "Failure responding to request")
21216		}
21217	}
21218	return
21219}
21220
21221// P2sVpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
21222// long-running operation.
21223type P2sVpnGatewaysUpdateTagsFuture struct {
21224	azure.Future
21225}
21226
21227// Result returns the result of the asynchronous operation.
21228// If the operation has not completed it will return an error.
21229func (future *P2sVpnGatewaysUpdateTagsFuture) Result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
21230	var done bool
21231	done, err = future.DoneWithContext(context.Background(), client)
21232	if err != nil {
21233		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
21234		return
21235	}
21236	if !done {
21237		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysUpdateTagsFuture")
21238		return
21239	}
21240	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21241	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
21242		pvg, err = client.UpdateTagsResponder(pvg.Response.Response)
21243		if err != nil {
21244			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysUpdateTagsFuture", "Result", pvg.Response.Response, "Failure responding to request")
21245		}
21246	}
21247	return
21248}
21249
21250// P2SVpnProfileParameters vpn Client Parameters for package generation.
21251type P2SVpnProfileParameters struct {
21252	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
21253	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
21254}
21255
21256// P2SVpnServerConfigRadiusClientRootCertificate radius client root certificate of
21257// P2SVpnServerConfiguration.
21258type P2SVpnServerConfigRadiusClientRootCertificate struct {
21259	// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat - Properties of the Radius client root certificate.
21260	*P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
21261	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21262	Name *string `json:"name,omitempty"`
21263	// Etag - A unique read-only string that changes whenever the resource is updated.
21264	Etag *string `json:"etag,omitempty"`
21265	// ID - Resource ID.
21266	ID *string `json:"id,omitempty"`
21267}
21268
21269// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusClientRootCertificate.
21270func (pvscrcrc P2SVpnServerConfigRadiusClientRootCertificate) MarshalJSON() ([]byte, error) {
21271	objectMap := make(map[string]interface{})
21272	if pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat != nil {
21273		objectMap["properties"] = pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
21274	}
21275	if pvscrcrc.Name != nil {
21276		objectMap["name"] = pvscrcrc.Name
21277	}
21278	if pvscrcrc.Etag != nil {
21279		objectMap["etag"] = pvscrcrc.Etag
21280	}
21281	if pvscrcrc.ID != nil {
21282		objectMap["id"] = pvscrcrc.ID
21283	}
21284	return json.Marshal(objectMap)
21285}
21286
21287// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusClientRootCertificate struct.
21288func (pvscrcrc *P2SVpnServerConfigRadiusClientRootCertificate) UnmarshalJSON(body []byte) error {
21289	var m map[string]*json.RawMessage
21290	err := json.Unmarshal(body, &m)
21291	if err != nil {
21292		return err
21293	}
21294	for k, v := range m {
21295		switch k {
21296		case "properties":
21297			if v != nil {
21298				var p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
21299				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat)
21300				if err != nil {
21301					return err
21302				}
21303				pvscrcrc.P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat
21304			}
21305		case "name":
21306			if v != nil {
21307				var name string
21308				err = json.Unmarshal(*v, &name)
21309				if err != nil {
21310					return err
21311				}
21312				pvscrcrc.Name = &name
21313			}
21314		case "etag":
21315			if v != nil {
21316				var etag string
21317				err = json.Unmarshal(*v, &etag)
21318				if err != nil {
21319					return err
21320				}
21321				pvscrcrc.Etag = &etag
21322			}
21323		case "id":
21324			if v != nil {
21325				var ID string
21326				err = json.Unmarshal(*v, &ID)
21327				if err != nil {
21328					return err
21329				}
21330				pvscrcrc.ID = &ID
21331			}
21332		}
21333	}
21334
21335	return nil
21336}
21337
21338// P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat properties of the Radius client root
21339// certificate of P2SVpnServerConfiguration.
21340type P2SVpnServerConfigRadiusClientRootCertificatePropertiesFormat struct {
21341	// Thumbprint - The Radius client root certificate thumbprint.
21342	Thumbprint *string `json:"thumbprint,omitempty"`
21343	// ProvisioningState - READ-ONLY; The provisioning state of the radius client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21344	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21345}
21346
21347// P2SVpnServerConfigRadiusServerRootCertificate radius Server root certificate of
21348// P2SVpnServerConfiguration.
21349type P2SVpnServerConfigRadiusServerRootCertificate struct {
21350	// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration Radius Server root certificate.
21351	*P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat `json:"properties,omitempty"`
21352	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21353	Name *string `json:"name,omitempty"`
21354	// Etag - A unique read-only string that changes whenever the resource is updated.
21355	Etag *string `json:"etag,omitempty"`
21356	// ID - Resource ID.
21357	ID *string `json:"id,omitempty"`
21358}
21359
21360// MarshalJSON is the custom marshaler for P2SVpnServerConfigRadiusServerRootCertificate.
21361func (pvscrsrc P2SVpnServerConfigRadiusServerRootCertificate) MarshalJSON() ([]byte, error) {
21362	objectMap := make(map[string]interface{})
21363	if pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat != nil {
21364		objectMap["properties"] = pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
21365	}
21366	if pvscrsrc.Name != nil {
21367		objectMap["name"] = pvscrsrc.Name
21368	}
21369	if pvscrsrc.Etag != nil {
21370		objectMap["etag"] = pvscrsrc.Etag
21371	}
21372	if pvscrsrc.ID != nil {
21373		objectMap["id"] = pvscrsrc.ID
21374	}
21375	return json.Marshal(objectMap)
21376}
21377
21378// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigRadiusServerRootCertificate struct.
21379func (pvscrsrc *P2SVpnServerConfigRadiusServerRootCertificate) UnmarshalJSON(body []byte) error {
21380	var m map[string]*json.RawMessage
21381	err := json.Unmarshal(body, &m)
21382	if err != nil {
21383		return err
21384	}
21385	for k, v := range m {
21386		switch k {
21387		case "properties":
21388			if v != nil {
21389				var p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
21390				err = json.Unmarshal(*v, &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat)
21391				if err != nil {
21392					return err
21393				}
21394				pvscrsrc.P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat = &p2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat
21395			}
21396		case "name":
21397			if v != nil {
21398				var name string
21399				err = json.Unmarshal(*v, &name)
21400				if err != nil {
21401					return err
21402				}
21403				pvscrsrc.Name = &name
21404			}
21405		case "etag":
21406			if v != nil {
21407				var etag string
21408				err = json.Unmarshal(*v, &etag)
21409				if err != nil {
21410					return err
21411				}
21412				pvscrsrc.Etag = &etag
21413			}
21414		case "id":
21415			if v != nil {
21416				var ID string
21417				err = json.Unmarshal(*v, &ID)
21418				if err != nil {
21419					return err
21420				}
21421				pvscrsrc.ID = &ID
21422			}
21423		}
21424	}
21425
21426	return nil
21427}
21428
21429// P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat properties of Radius Server root
21430// certificate of P2SVpnServerConfiguration.
21431type P2SVpnServerConfigRadiusServerRootCertificatePropertiesFormat struct {
21432	// PublicCertData - The certificate public data.
21433	PublicCertData *string `json:"publicCertData,omitempty"`
21434	// ProvisioningState - READ-ONLY; The provisioning state of the radius server root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21435	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21436}
21437
21438// P2SVpnServerConfiguration p2SVpnServerConfiguration Resource.
21439type P2SVpnServerConfiguration struct {
21440	autorest.Response `json:"-"`
21441	// P2SVpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
21442	*P2SVpnServerConfigurationProperties `json:"properties,omitempty"`
21443	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21444	Name *string `json:"name,omitempty"`
21445	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
21446	Etag *string `json:"etag,omitempty"`
21447	// ID - Resource ID.
21448	ID *string `json:"id,omitempty"`
21449}
21450
21451// MarshalJSON is the custom marshaler for P2SVpnServerConfiguration.
21452func (pvsc P2SVpnServerConfiguration) MarshalJSON() ([]byte, error) {
21453	objectMap := make(map[string]interface{})
21454	if pvsc.P2SVpnServerConfigurationProperties != nil {
21455		objectMap["properties"] = pvsc.P2SVpnServerConfigurationProperties
21456	}
21457	if pvsc.Name != nil {
21458		objectMap["name"] = pvsc.Name
21459	}
21460	if pvsc.ID != nil {
21461		objectMap["id"] = pvsc.ID
21462	}
21463	return json.Marshal(objectMap)
21464}
21465
21466// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfiguration struct.
21467func (pvsc *P2SVpnServerConfiguration) UnmarshalJSON(body []byte) error {
21468	var m map[string]*json.RawMessage
21469	err := json.Unmarshal(body, &m)
21470	if err != nil {
21471		return err
21472	}
21473	for k, v := range m {
21474		switch k {
21475		case "properties":
21476			if v != nil {
21477				var p2SVpnServerConfigurationProperties P2SVpnServerConfigurationProperties
21478				err = json.Unmarshal(*v, &p2SVpnServerConfigurationProperties)
21479				if err != nil {
21480					return err
21481				}
21482				pvsc.P2SVpnServerConfigurationProperties = &p2SVpnServerConfigurationProperties
21483			}
21484		case "name":
21485			if v != nil {
21486				var name string
21487				err = json.Unmarshal(*v, &name)
21488				if err != nil {
21489					return err
21490				}
21491				pvsc.Name = &name
21492			}
21493		case "etag":
21494			if v != nil {
21495				var etag string
21496				err = json.Unmarshal(*v, &etag)
21497				if err != nil {
21498					return err
21499				}
21500				pvsc.Etag = &etag
21501			}
21502		case "id":
21503			if v != nil {
21504				var ID string
21505				err = json.Unmarshal(*v, &ID)
21506				if err != nil {
21507					return err
21508				}
21509				pvsc.ID = &ID
21510			}
21511		}
21512	}
21513
21514	return nil
21515}
21516
21517// P2SVpnServerConfigurationProperties parameters for P2SVpnServerConfiguration.
21518type P2SVpnServerConfigurationProperties struct {
21519	// Name - The name of the P2SVpnServerConfiguration that is unique within a VirtualWan in a resource group. This name can be used to access the resource along with Paren VirtualWan resource name.
21520	Name *string `json:"name,omitempty"`
21521	// VpnProtocols - VPN protocols for the P2SVpnServerConfiguration.
21522	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
21523	// P2SVpnServerConfigVpnClientRootCertificates - VPN client root certificate of P2SVpnServerConfiguration.
21524	P2SVpnServerConfigVpnClientRootCertificates *[]P2SVpnServerConfigVpnClientRootCertificate `json:"p2SVpnServerConfigVpnClientRootCertificates,omitempty"`
21525	// P2SVpnServerConfigVpnClientRevokedCertificates - VPN client revoked certificate of P2SVpnServerConfiguration.
21526	P2SVpnServerConfigVpnClientRevokedCertificates *[]P2SVpnServerConfigVpnClientRevokedCertificate `json:"p2SVpnServerConfigVpnClientRevokedCertificates,omitempty"`
21527	// P2SVpnServerConfigRadiusServerRootCertificates - Radius Server root certificate of P2SVpnServerConfiguration.
21528	P2SVpnServerConfigRadiusServerRootCertificates *[]P2SVpnServerConfigRadiusServerRootCertificate `json:"p2SVpnServerConfigRadiusServerRootCertificates,omitempty"`
21529	// P2SVpnServerConfigRadiusClientRootCertificates - Radius client root certificate of P2SVpnServerConfiguration.
21530	P2SVpnServerConfigRadiusClientRootCertificates *[]P2SVpnServerConfigRadiusClientRootCertificate `json:"p2SVpnServerConfigRadiusClientRootCertificates,omitempty"`
21531	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for P2SVpnServerConfiguration.
21532	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
21533	// RadiusServerAddress - The radius server address property of the P2SVpnServerConfiguration resource for point to site client connection.
21534	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
21535	// RadiusServerSecret - The radius secret property of the P2SVpnServerConfiguration resource for point to site client connection.
21536	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
21537	// ProvisioningState - READ-ONLY; The provisioning state of the P2S VPN server configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21538	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21539	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
21540	P2SVpnGateways *[]SubResource `json:"p2SVpnGateways,omitempty"`
21541	// Etag - A unique read-only string that changes whenever the resource is updated.
21542	Etag *string `json:"etag,omitempty"`
21543}
21544
21545// P2sVpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
21546// of a long-running operation.
21547type P2sVpnServerConfigurationsCreateOrUpdateFuture struct {
21548	azure.Future
21549}
21550
21551// Result returns the result of the asynchronous operation.
21552// If the operation has not completed it will return an error.
21553func (future *P2sVpnServerConfigurationsCreateOrUpdateFuture) Result(client P2sVpnServerConfigurationsClient) (pvsc P2SVpnServerConfiguration, err error) {
21554	var done bool
21555	done, err = future.DoneWithContext(context.Background(), client)
21556	if err != nil {
21557		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
21558		return
21559	}
21560	if !done {
21561		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsCreateOrUpdateFuture")
21562		return
21563	}
21564	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21565	if pvsc.Response.Response, err = future.GetResult(sender); err == nil && pvsc.Response.Response.StatusCode != http.StatusNoContent {
21566		pvsc, err = client.CreateOrUpdateResponder(pvsc.Response.Response)
21567		if err != nil {
21568			err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsCreateOrUpdateFuture", "Result", pvsc.Response.Response, "Failure responding to request")
21569		}
21570	}
21571	return
21572}
21573
21574// P2sVpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
21575// long-running operation.
21576type P2sVpnServerConfigurationsDeleteFuture struct {
21577	azure.Future
21578}
21579
21580// Result returns the result of the asynchronous operation.
21581// If the operation has not completed it will return an error.
21582func (future *P2sVpnServerConfigurationsDeleteFuture) Result(client P2sVpnServerConfigurationsClient) (ar autorest.Response, err error) {
21583	var done bool
21584	done, err = future.DoneWithContext(context.Background(), client)
21585	if err != nil {
21586		err = autorest.NewErrorWithError(err, "network.P2sVpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
21587		return
21588	}
21589	if !done {
21590		err = azure.NewAsyncOpIncompleteError("network.P2sVpnServerConfigurationsDeleteFuture")
21591		return
21592	}
21593	ar.Response = future.Response()
21594	return
21595}
21596
21597// P2SVpnServerConfigVpnClientRevokedCertificate VPN client revoked certificate of
21598// P2SVpnServerConfiguration.
21599type P2SVpnServerConfigVpnClientRevokedCertificate struct {
21600	// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
21601	*P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
21602	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21603	Name *string `json:"name,omitempty"`
21604	// Etag - A unique read-only string that changes whenever the resource is updated.
21605	Etag *string `json:"etag,omitempty"`
21606	// ID - Resource ID.
21607	ID *string `json:"id,omitempty"`
21608}
21609
21610// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRevokedCertificate.
21611func (pvscvcrc P2SVpnServerConfigVpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
21612	objectMap := make(map[string]interface{})
21613	if pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat != nil {
21614		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
21615	}
21616	if pvscvcrc.Name != nil {
21617		objectMap["name"] = pvscvcrc.Name
21618	}
21619	if pvscvcrc.Etag != nil {
21620		objectMap["etag"] = pvscvcrc.Etag
21621	}
21622	if pvscvcrc.ID != nil {
21623		objectMap["id"] = pvscvcrc.ID
21624	}
21625	return json.Marshal(objectMap)
21626}
21627
21628// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRevokedCertificate struct.
21629func (pvscvcrc *P2SVpnServerConfigVpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
21630	var m map[string]*json.RawMessage
21631	err := json.Unmarshal(body, &m)
21632	if err != nil {
21633		return err
21634	}
21635	for k, v := range m {
21636		switch k {
21637		case "properties":
21638			if v != nil {
21639				var p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
21640				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat)
21641				if err != nil {
21642					return err
21643				}
21644				pvscvcrc.P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat
21645			}
21646		case "name":
21647			if v != nil {
21648				var name string
21649				err = json.Unmarshal(*v, &name)
21650				if err != nil {
21651					return err
21652				}
21653				pvscvcrc.Name = &name
21654			}
21655		case "etag":
21656			if v != nil {
21657				var etag string
21658				err = json.Unmarshal(*v, &etag)
21659				if err != nil {
21660					return err
21661				}
21662				pvscvcrc.Etag = &etag
21663			}
21664		case "id":
21665			if v != nil {
21666				var ID string
21667				err = json.Unmarshal(*v, &ID)
21668				if err != nil {
21669					return err
21670				}
21671				pvscvcrc.ID = &ID
21672			}
21673		}
21674	}
21675
21676	return nil
21677}
21678
21679// P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client
21680// certificate of P2SVpnServerConfiguration.
21681type P2SVpnServerConfigVpnClientRevokedCertificatePropertiesFormat struct {
21682	// Thumbprint - The revoked VPN client certificate thumbprint.
21683	Thumbprint *string `json:"thumbprint,omitempty"`
21684	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21685	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21686}
21687
21688// P2SVpnServerConfigVpnClientRootCertificate VPN client root certificate of P2SVpnServerConfiguration.
21689type P2SVpnServerConfigVpnClientRootCertificate struct {
21690	// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat - Properties of the P2SVpnServerConfiguration VPN client root certificate.
21691	*P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
21692	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
21693	Name *string `json:"name,omitempty"`
21694	// Etag - A unique read-only string that changes whenever the resource is updated.
21695	Etag *string `json:"etag,omitempty"`
21696	// ID - Resource ID.
21697	ID *string `json:"id,omitempty"`
21698}
21699
21700// MarshalJSON is the custom marshaler for P2SVpnServerConfigVpnClientRootCertificate.
21701func (pvscvcrc P2SVpnServerConfigVpnClientRootCertificate) MarshalJSON() ([]byte, error) {
21702	objectMap := make(map[string]interface{})
21703	if pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat != nil {
21704		objectMap["properties"] = pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
21705	}
21706	if pvscvcrc.Name != nil {
21707		objectMap["name"] = pvscvcrc.Name
21708	}
21709	if pvscvcrc.Etag != nil {
21710		objectMap["etag"] = pvscvcrc.Etag
21711	}
21712	if pvscvcrc.ID != nil {
21713		objectMap["id"] = pvscvcrc.ID
21714	}
21715	return json.Marshal(objectMap)
21716}
21717
21718// UnmarshalJSON is the custom unmarshaler for P2SVpnServerConfigVpnClientRootCertificate struct.
21719func (pvscvcrc *P2SVpnServerConfigVpnClientRootCertificate) UnmarshalJSON(body []byte) error {
21720	var m map[string]*json.RawMessage
21721	err := json.Unmarshal(body, &m)
21722	if err != nil {
21723		return err
21724	}
21725	for k, v := range m {
21726		switch k {
21727		case "properties":
21728			if v != nil {
21729				var p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
21730				err = json.Unmarshal(*v, &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat)
21731				if err != nil {
21732					return err
21733				}
21734				pvscvcrc.P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat = &p2SVpnServerConfigVpnClientRootCertificatePropertiesFormat
21735			}
21736		case "name":
21737			if v != nil {
21738				var name string
21739				err = json.Unmarshal(*v, &name)
21740				if err != nil {
21741					return err
21742				}
21743				pvscvcrc.Name = &name
21744			}
21745		case "etag":
21746			if v != nil {
21747				var etag string
21748				err = json.Unmarshal(*v, &etag)
21749				if err != nil {
21750					return err
21751				}
21752				pvscvcrc.Etag = &etag
21753			}
21754		case "id":
21755			if v != nil {
21756				var ID string
21757				err = json.Unmarshal(*v, &ID)
21758				if err != nil {
21759					return err
21760				}
21761				pvscvcrc.ID = &ID
21762			}
21763		}
21764	}
21765
21766	return nil
21767}
21768
21769// P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat properties of VPN client root certificate of
21770// P2SVpnServerConfiguration.
21771type P2SVpnServerConfigVpnClientRootCertificatePropertiesFormat struct {
21772	// PublicCertData - The certificate public data.
21773	PublicCertData *string `json:"publicCertData,omitempty"`
21774	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21775	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21776}
21777
21778// PacketCapture parameters that define the create packet capture operation.
21779type PacketCapture struct {
21780	// PacketCaptureParameters - Properties of the packet capture.
21781	*PacketCaptureParameters `json:"properties,omitempty"`
21782}
21783
21784// MarshalJSON is the custom marshaler for PacketCapture.
21785func (pc PacketCapture) MarshalJSON() ([]byte, error) {
21786	objectMap := make(map[string]interface{})
21787	if pc.PacketCaptureParameters != nil {
21788		objectMap["properties"] = pc.PacketCaptureParameters
21789	}
21790	return json.Marshal(objectMap)
21791}
21792
21793// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
21794func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
21795	var m map[string]*json.RawMessage
21796	err := json.Unmarshal(body, &m)
21797	if err != nil {
21798		return err
21799	}
21800	for k, v := range m {
21801		switch k {
21802		case "properties":
21803			if v != nil {
21804				var packetCaptureParameters PacketCaptureParameters
21805				err = json.Unmarshal(*v, &packetCaptureParameters)
21806				if err != nil {
21807					return err
21808				}
21809				pc.PacketCaptureParameters = &packetCaptureParameters
21810			}
21811		}
21812	}
21813
21814	return nil
21815}
21816
21817// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
21818type PacketCaptureFilter struct {
21819	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
21820	Protocol PcProtocol `json:"protocol,omitempty"`
21821	// 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.
21822	LocalIPAddress *string `json:"localIPAddress,omitempty"`
21823	// 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.
21824	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
21825	// 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.
21826	LocalPort *string `json:"localPort,omitempty"`
21827	// 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.
21828	RemotePort *string `json:"remotePort,omitempty"`
21829}
21830
21831// PacketCaptureListResult list of packet capture sessions.
21832type PacketCaptureListResult struct {
21833	autorest.Response `json:"-"`
21834	// Value - Information about packet capture sessions.
21835	Value *[]PacketCaptureResult `json:"value,omitempty"`
21836}
21837
21838// PacketCaptureParameters parameters that define the create packet capture operation.
21839type PacketCaptureParameters struct {
21840	// Target - The ID of the targeted resource, only VM is currently supported.
21841	Target *string `json:"target,omitempty"`
21842	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
21843	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
21844	// TotalBytesPerSession - Maximum size of the capture output.
21845	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
21846	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
21847	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
21848	// StorageLocation - Describes the storage location for a packet capture session.
21849	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
21850	// Filters - A list of packet capture filters.
21851	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
21852}
21853
21854// PacketCaptureQueryStatusResult status of packet capture session.
21855type PacketCaptureQueryStatusResult struct {
21856	autorest.Response `json:"-"`
21857	// Name - The name of the packet capture resource.
21858	Name *string `json:"name,omitempty"`
21859	// ID - The ID of the packet capture resource.
21860	ID *string `json:"id,omitempty"`
21861	// CaptureStartTime - The start time of the packet capture session.
21862	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
21863	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
21864	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
21865	// StopReason - The reason the current packet capture session was stopped.
21866	StopReason *string `json:"stopReason,omitempty"`
21867	// PacketCaptureError - List of errors of packet capture session.
21868	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
21869}
21870
21871// PacketCaptureResult information about packet capture session.
21872type PacketCaptureResult struct {
21873	autorest.Response `json:"-"`
21874	// Name - READ-ONLY; Name of the packet capture session.
21875	Name *string `json:"name,omitempty"`
21876	// ID - READ-ONLY; ID of the packet capture operation.
21877	ID *string `json:"id,omitempty"`
21878	// Etag - A unique read-only string that changes whenever the resource is updated.
21879	Etag *string `json:"etag,omitempty"`
21880	// PacketCaptureResultProperties - Properties of the packet capture result.
21881	*PacketCaptureResultProperties `json:"properties,omitempty"`
21882}
21883
21884// MarshalJSON is the custom marshaler for PacketCaptureResult.
21885func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
21886	objectMap := make(map[string]interface{})
21887	if pcr.Etag != nil {
21888		objectMap["etag"] = pcr.Etag
21889	}
21890	if pcr.PacketCaptureResultProperties != nil {
21891		objectMap["properties"] = pcr.PacketCaptureResultProperties
21892	}
21893	return json.Marshal(objectMap)
21894}
21895
21896// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
21897func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
21898	var m map[string]*json.RawMessage
21899	err := json.Unmarshal(body, &m)
21900	if err != nil {
21901		return err
21902	}
21903	for k, v := range m {
21904		switch k {
21905		case "name":
21906			if v != nil {
21907				var name string
21908				err = json.Unmarshal(*v, &name)
21909				if err != nil {
21910					return err
21911				}
21912				pcr.Name = &name
21913			}
21914		case "id":
21915			if v != nil {
21916				var ID string
21917				err = json.Unmarshal(*v, &ID)
21918				if err != nil {
21919					return err
21920				}
21921				pcr.ID = &ID
21922			}
21923		case "etag":
21924			if v != nil {
21925				var etag string
21926				err = json.Unmarshal(*v, &etag)
21927				if err != nil {
21928					return err
21929				}
21930				pcr.Etag = &etag
21931			}
21932		case "properties":
21933			if v != nil {
21934				var packetCaptureResultProperties PacketCaptureResultProperties
21935				err = json.Unmarshal(*v, &packetCaptureResultProperties)
21936				if err != nil {
21937					return err
21938				}
21939				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
21940			}
21941		}
21942	}
21943
21944	return nil
21945}
21946
21947// PacketCaptureResultProperties describes the properties of a packet capture session.
21948type PacketCaptureResultProperties struct {
21949	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
21950	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
21951	// Target - The ID of the targeted resource, only VM is currently supported.
21952	Target *string `json:"target,omitempty"`
21953	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
21954	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
21955	// TotalBytesPerSession - Maximum size of the capture output.
21956	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
21957	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
21958	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
21959	// StorageLocation - Describes the storage location for a packet capture session.
21960	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
21961	// Filters - A list of packet capture filters.
21962	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
21963}
21964
21965// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
21966// operation.
21967type PacketCapturesCreateFuture struct {
21968	azure.Future
21969}
21970
21971// Result returns the result of the asynchronous operation.
21972// If the operation has not completed it will return an error.
21973func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
21974	var done bool
21975	done, err = future.DoneWithContext(context.Background(), client)
21976	if err != nil {
21977		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
21978		return
21979	}
21980	if !done {
21981		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
21982		return
21983	}
21984	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21985	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
21986		pcr, err = client.CreateResponder(pcr.Response.Response)
21987		if err != nil {
21988			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
21989		}
21990	}
21991	return
21992}
21993
21994// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
21995// operation.
21996type PacketCapturesDeleteFuture struct {
21997	azure.Future
21998}
21999
22000// Result returns the result of the asynchronous operation.
22001// If the operation has not completed it will return an error.
22002func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
22003	var done bool
22004	done, err = future.DoneWithContext(context.Background(), client)
22005	if err != nil {
22006		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
22007		return
22008	}
22009	if !done {
22010		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
22011		return
22012	}
22013	ar.Response = future.Response()
22014	return
22015}
22016
22017// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
22018// operation.
22019type PacketCapturesGetStatusFuture struct {
22020	azure.Future
22021}
22022
22023// Result returns the result of the asynchronous operation.
22024// If the operation has not completed it will return an error.
22025func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
22026	var done bool
22027	done, err = future.DoneWithContext(context.Background(), client)
22028	if err != nil {
22029		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
22030		return
22031	}
22032	if !done {
22033		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
22034		return
22035	}
22036	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22037	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
22038		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
22039		if err != nil {
22040			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
22041		}
22042	}
22043	return
22044}
22045
22046// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
22047// operation.
22048type PacketCapturesStopFuture struct {
22049	azure.Future
22050}
22051
22052// Result returns the result of the asynchronous operation.
22053// If the operation has not completed it will return an error.
22054func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
22055	var done bool
22056	done, err = future.DoneWithContext(context.Background(), client)
22057	if err != nil {
22058		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
22059		return
22060	}
22061	if !done {
22062		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
22063		return
22064	}
22065	ar.Response = future.Response()
22066	return
22067}
22068
22069// PacketCaptureStorageLocation describes the storage location for a packet capture session.
22070type PacketCaptureStorageLocation struct {
22071	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
22072	StorageID *string `json:"storageId,omitempty"`
22073	// 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.
22074	StoragePath *string `json:"storagePath,omitempty"`
22075	// 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.
22076	FilePath *string `json:"filePath,omitempty"`
22077}
22078
22079// PatchRouteFilter route Filter Resource.
22080type PatchRouteFilter struct {
22081	// RouteFilterPropertiesFormat - Properties of the route filter.
22082	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
22083	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
22084	Name *string `json:"name,omitempty"`
22085	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22086	Etag *string `json:"etag,omitempty"`
22087	// Type - READ-ONLY; Resource type.
22088	Type *string `json:"type,omitempty"`
22089	// Tags - Resource tags.
22090	Tags map[string]*string `json:"tags"`
22091	// ID - Resource ID.
22092	ID *string `json:"id,omitempty"`
22093}
22094
22095// MarshalJSON is the custom marshaler for PatchRouteFilter.
22096func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
22097	objectMap := make(map[string]interface{})
22098	if prf.RouteFilterPropertiesFormat != nil {
22099		objectMap["properties"] = prf.RouteFilterPropertiesFormat
22100	}
22101	if prf.Tags != nil {
22102		objectMap["tags"] = prf.Tags
22103	}
22104	if prf.ID != nil {
22105		objectMap["id"] = prf.ID
22106	}
22107	return json.Marshal(objectMap)
22108}
22109
22110// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
22111func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
22112	var m map[string]*json.RawMessage
22113	err := json.Unmarshal(body, &m)
22114	if err != nil {
22115		return err
22116	}
22117	for k, v := range m {
22118		switch k {
22119		case "properties":
22120			if v != nil {
22121				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
22122				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
22123				if err != nil {
22124					return err
22125				}
22126				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
22127			}
22128		case "name":
22129			if v != nil {
22130				var name string
22131				err = json.Unmarshal(*v, &name)
22132				if err != nil {
22133					return err
22134				}
22135				prf.Name = &name
22136			}
22137		case "etag":
22138			if v != nil {
22139				var etag string
22140				err = json.Unmarshal(*v, &etag)
22141				if err != nil {
22142					return err
22143				}
22144				prf.Etag = &etag
22145			}
22146		case "type":
22147			if v != nil {
22148				var typeVar string
22149				err = json.Unmarshal(*v, &typeVar)
22150				if err != nil {
22151					return err
22152				}
22153				prf.Type = &typeVar
22154			}
22155		case "tags":
22156			if v != nil {
22157				var tags map[string]*string
22158				err = json.Unmarshal(*v, &tags)
22159				if err != nil {
22160					return err
22161				}
22162				prf.Tags = tags
22163			}
22164		case "id":
22165			if v != nil {
22166				var ID string
22167				err = json.Unmarshal(*v, &ID)
22168				if err != nil {
22169					return err
22170				}
22171				prf.ID = &ID
22172			}
22173		}
22174	}
22175
22176	return nil
22177}
22178
22179// PatchRouteFilterRule route Filter Rule Resource.
22180type PatchRouteFilterRule struct {
22181	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
22182	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
22183	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
22184	Name *string `json:"name,omitempty"`
22185	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22186	Etag *string `json:"etag,omitempty"`
22187	// ID - Resource ID.
22188	ID *string `json:"id,omitempty"`
22189}
22190
22191// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
22192func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
22193	objectMap := make(map[string]interface{})
22194	if prfr.RouteFilterRulePropertiesFormat != nil {
22195		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
22196	}
22197	if prfr.ID != nil {
22198		objectMap["id"] = prfr.ID
22199	}
22200	return json.Marshal(objectMap)
22201}
22202
22203// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
22204func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
22205	var m map[string]*json.RawMessage
22206	err := json.Unmarshal(body, &m)
22207	if err != nil {
22208		return err
22209	}
22210	for k, v := range m {
22211		switch k {
22212		case "properties":
22213			if v != nil {
22214				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
22215				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
22216				if err != nil {
22217					return err
22218				}
22219				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
22220			}
22221		case "name":
22222			if v != nil {
22223				var name string
22224				err = json.Unmarshal(*v, &name)
22225				if err != nil {
22226					return err
22227				}
22228				prfr.Name = &name
22229			}
22230		case "etag":
22231			if v != nil {
22232				var etag string
22233				err = json.Unmarshal(*v, &etag)
22234				if err != nil {
22235					return err
22236				}
22237				prfr.Etag = &etag
22238			}
22239		case "id":
22240			if v != nil {
22241				var ID string
22242				err = json.Unmarshal(*v, &ID)
22243				if err != nil {
22244					return err
22245				}
22246				prfr.ID = &ID
22247			}
22248		}
22249	}
22250
22251	return nil
22252}
22253
22254// PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
22255// resource.
22256type PeerExpressRouteCircuitConnection struct {
22257	autorest.Response `json:"-"`
22258	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
22259	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
22260	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
22261	Name *string `json:"name,omitempty"`
22262	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22263	Etag *string `json:"etag,omitempty"`
22264	// Type - READ-ONLY; Type of the resource.
22265	Type *string `json:"type,omitempty"`
22266	// ID - Resource ID.
22267	ID *string `json:"id,omitempty"`
22268}
22269
22270// MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
22271func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
22272	objectMap := make(map[string]interface{})
22273	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
22274		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
22275	}
22276	if percc.Name != nil {
22277		objectMap["name"] = percc.Name
22278	}
22279	if percc.ID != nil {
22280		objectMap["id"] = percc.ID
22281	}
22282	return json.Marshal(objectMap)
22283}
22284
22285// UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
22286func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
22287	var m map[string]*json.RawMessage
22288	err := json.Unmarshal(body, &m)
22289	if err != nil {
22290		return err
22291	}
22292	for k, v := range m {
22293		switch k {
22294		case "properties":
22295			if v != nil {
22296				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
22297				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
22298				if err != nil {
22299					return err
22300				}
22301				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
22302			}
22303		case "name":
22304			if v != nil {
22305				var name string
22306				err = json.Unmarshal(*v, &name)
22307				if err != nil {
22308					return err
22309				}
22310				percc.Name = &name
22311			}
22312		case "etag":
22313			if v != nil {
22314				var etag string
22315				err = json.Unmarshal(*v, &etag)
22316				if err != nil {
22317					return err
22318				}
22319				percc.Etag = &etag
22320			}
22321		case "type":
22322			if v != nil {
22323				var typeVar string
22324				err = json.Unmarshal(*v, &typeVar)
22325				if err != nil {
22326					return err
22327				}
22328				percc.Type = &typeVar
22329			}
22330		case "id":
22331			if v != nil {
22332				var ID string
22333				err = json.Unmarshal(*v, &ID)
22334				if err != nil {
22335					return err
22336				}
22337				percc.ID = &ID
22338			}
22339		}
22340	}
22341
22342	return nil
22343}
22344
22345// PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
22346// retrieves all global reach peer circuit connections that belongs to a Private Peering for an
22347// ExpressRouteCircuit.
22348type PeerExpressRouteCircuitConnectionListResult struct {
22349	autorest.Response `json:"-"`
22350	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
22351	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
22352	// NextLink - The URL to get the next set of results.
22353	NextLink *string `json:"nextLink,omitempty"`
22354}
22355
22356// PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
22357// PeerExpressRouteCircuitConnection values.
22358type PeerExpressRouteCircuitConnectionListResultIterator struct {
22359	i    int
22360	page PeerExpressRouteCircuitConnectionListResultPage
22361}
22362
22363// NextWithContext advances to the next value.  If there was an error making
22364// the request the iterator does not advance and the error is returned.
22365func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
22366	if tracing.IsEnabled() {
22367		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
22368		defer func() {
22369			sc := -1
22370			if iter.Response().Response.Response != nil {
22371				sc = iter.Response().Response.Response.StatusCode
22372			}
22373			tracing.EndSpan(ctx, sc, err)
22374		}()
22375	}
22376	iter.i++
22377	if iter.i < len(iter.page.Values()) {
22378		return nil
22379	}
22380	err = iter.page.NextWithContext(ctx)
22381	if err != nil {
22382		iter.i--
22383		return err
22384	}
22385	iter.i = 0
22386	return nil
22387}
22388
22389// Next advances to the next value.  If there was an error making
22390// the request the iterator does not advance and the error is returned.
22391// Deprecated: Use NextWithContext() instead.
22392func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
22393	return iter.NextWithContext(context.Background())
22394}
22395
22396// NotDone returns true if the enumeration should be started or is not yet complete.
22397func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
22398	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22399}
22400
22401// Response returns the raw server response from the last page request.
22402func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
22403	return iter.page.Response()
22404}
22405
22406// Value returns the current value or a zero-initialized value if the
22407// iterator has advanced beyond the end of the collection.
22408func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
22409	if !iter.page.NotDone() {
22410		return PeerExpressRouteCircuitConnection{}
22411	}
22412	return iter.page.Values()[iter.i]
22413}
22414
22415// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
22416func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
22417	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
22418}
22419
22420// IsEmpty returns true if the ListResult contains no values.
22421func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
22422	return percclr.Value == nil || len(*percclr.Value) == 0
22423}
22424
22425// peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
22426// It returns nil if no more results exist.
22427func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
22428	if percclr.NextLink == nil || len(to.String(percclr.NextLink)) < 1 {
22429		return nil, nil
22430	}
22431	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22432		autorest.AsJSON(),
22433		autorest.AsGet(),
22434		autorest.WithBaseURL(to.String(percclr.NextLink)))
22435}
22436
22437// PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
22438// values.
22439type PeerExpressRouteCircuitConnectionListResultPage struct {
22440	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
22441	percclr PeerExpressRouteCircuitConnectionListResult
22442}
22443
22444// NextWithContext advances to the next page of values.  If there was an error making
22445// the request the page does not advance and the error is returned.
22446func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
22447	if tracing.IsEnabled() {
22448		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
22449		defer func() {
22450			sc := -1
22451			if page.Response().Response.Response != nil {
22452				sc = page.Response().Response.Response.StatusCode
22453			}
22454			tracing.EndSpan(ctx, sc, err)
22455		}()
22456	}
22457	next, err := page.fn(ctx, page.percclr)
22458	if err != nil {
22459		return err
22460	}
22461	page.percclr = next
22462	return nil
22463}
22464
22465// Next advances to the next page of values.  If there was an error making
22466// the request the page does not advance and the error is returned.
22467// Deprecated: Use NextWithContext() instead.
22468func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
22469	return page.NextWithContext(context.Background())
22470}
22471
22472// NotDone returns true if the page enumeration should be started or is not yet complete.
22473func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
22474	return !page.percclr.IsEmpty()
22475}
22476
22477// Response returns the raw server response from the last page request.
22478func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
22479	return page.percclr
22480}
22481
22482// Values returns the slice of values for the current page or nil if there are no values.
22483func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
22484	if page.percclr.IsEmpty() {
22485		return nil
22486	}
22487	return *page.percclr.Value
22488}
22489
22490// Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
22491func NewPeerExpressRouteCircuitConnectionListResultPage(getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
22492	return PeerExpressRouteCircuitConnectionListResultPage{fn: getNextPage}
22493}
22494
22495// PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
22496// connection.
22497type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
22498	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
22499	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
22500	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
22501	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
22502	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
22503	AddressPrefix *string `json:"addressPrefix,omitempty"`
22504	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
22505	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
22506	// ConnectionName - The name of the express route circuit connection resource.
22507	ConnectionName *string `json:"connectionName,omitempty"`
22508	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
22509	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
22510	// ProvisioningState - READ-ONLY; The provisioning state of the peer express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22511	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22512}
22513
22514// PolicySettings defines contents of a web application firewall global configuration.
22515type PolicySettings struct {
22516	// EnabledState - Describes if the policy is in enabled state or disabled state. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
22517	EnabledState WebApplicationFirewallEnabledState `json:"enabledState,omitempty"`
22518	// Mode - Describes if it is in detection mode or prevention mode at policy level. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
22519	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
22520}
22521
22522// PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
22523type PrepareNetworkPoliciesRequest struct {
22524	// ServiceName - The name of the service for which subnet is being prepared for.
22525	ServiceName *string `json:"serviceName,omitempty"`
22526	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
22527	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
22528}
22529
22530// PrivateEndpoint private endpoint resource.
22531type PrivateEndpoint struct {
22532	autorest.Response `json:"-"`
22533	// PrivateEndpointProperties - Properties of the private endpoint.
22534	*PrivateEndpointProperties `json:"properties,omitempty"`
22535	// Etag - A unique read-only string that changes whenever the resource is updated.
22536	Etag *string `json:"etag,omitempty"`
22537	// ID - Resource ID.
22538	ID *string `json:"id,omitempty"`
22539	// Name - READ-ONLY; Resource name.
22540	Name *string `json:"name,omitempty"`
22541	// Type - READ-ONLY; Resource type.
22542	Type *string `json:"type,omitempty"`
22543	// Location - Resource location.
22544	Location *string `json:"location,omitempty"`
22545	// Tags - Resource tags.
22546	Tags map[string]*string `json:"tags"`
22547}
22548
22549// MarshalJSON is the custom marshaler for PrivateEndpoint.
22550func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) {
22551	objectMap := make(map[string]interface{})
22552	if peVar.PrivateEndpointProperties != nil {
22553		objectMap["properties"] = peVar.PrivateEndpointProperties
22554	}
22555	if peVar.Etag != nil {
22556		objectMap["etag"] = peVar.Etag
22557	}
22558	if peVar.ID != nil {
22559		objectMap["id"] = peVar.ID
22560	}
22561	if peVar.Location != nil {
22562		objectMap["location"] = peVar.Location
22563	}
22564	if peVar.Tags != nil {
22565		objectMap["tags"] = peVar.Tags
22566	}
22567	return json.Marshal(objectMap)
22568}
22569
22570// UnmarshalJSON is the custom unmarshaler for PrivateEndpoint struct.
22571func (peVar *PrivateEndpoint) UnmarshalJSON(body []byte) error {
22572	var m map[string]*json.RawMessage
22573	err := json.Unmarshal(body, &m)
22574	if err != nil {
22575		return err
22576	}
22577	for k, v := range m {
22578		switch k {
22579		case "properties":
22580			if v != nil {
22581				var privateEndpointProperties PrivateEndpointProperties
22582				err = json.Unmarshal(*v, &privateEndpointProperties)
22583				if err != nil {
22584					return err
22585				}
22586				peVar.PrivateEndpointProperties = &privateEndpointProperties
22587			}
22588		case "etag":
22589			if v != nil {
22590				var etag string
22591				err = json.Unmarshal(*v, &etag)
22592				if err != nil {
22593					return err
22594				}
22595				peVar.Etag = &etag
22596			}
22597		case "id":
22598			if v != nil {
22599				var ID string
22600				err = json.Unmarshal(*v, &ID)
22601				if err != nil {
22602					return err
22603				}
22604				peVar.ID = &ID
22605			}
22606		case "name":
22607			if v != nil {
22608				var name string
22609				err = json.Unmarshal(*v, &name)
22610				if err != nil {
22611					return err
22612				}
22613				peVar.Name = &name
22614			}
22615		case "type":
22616			if v != nil {
22617				var typeVar string
22618				err = json.Unmarshal(*v, &typeVar)
22619				if err != nil {
22620					return err
22621				}
22622				peVar.Type = &typeVar
22623			}
22624		case "location":
22625			if v != nil {
22626				var location string
22627				err = json.Unmarshal(*v, &location)
22628				if err != nil {
22629					return err
22630				}
22631				peVar.Location = &location
22632			}
22633		case "tags":
22634			if v != nil {
22635				var tags map[string]*string
22636				err = json.Unmarshal(*v, &tags)
22637				if err != nil {
22638					return err
22639				}
22640				peVar.Tags = tags
22641			}
22642		}
22643	}
22644
22645	return nil
22646}
22647
22648// PrivateEndpointConnection privateEndpointConnection resource.
22649type PrivateEndpointConnection struct {
22650	autorest.Response `json:"-"`
22651	// PrivateEndpointConnectionProperties - Properties of the private end point connection.
22652	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
22653	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
22654	Name *string `json:"name,omitempty"`
22655	// Type - READ-ONLY; The resource type.
22656	Type *string `json:"type,omitempty"`
22657	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
22658	Etag *string `json:"etag,omitempty"`
22659	// ID - Resource ID.
22660	ID *string `json:"id,omitempty"`
22661}
22662
22663// MarshalJSON is the custom marshaler for PrivateEndpointConnection.
22664func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
22665	objectMap := make(map[string]interface{})
22666	if pec.PrivateEndpointConnectionProperties != nil {
22667		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
22668	}
22669	if pec.Name != nil {
22670		objectMap["name"] = pec.Name
22671	}
22672	if pec.ID != nil {
22673		objectMap["id"] = pec.ID
22674	}
22675	return json.Marshal(objectMap)
22676}
22677
22678// UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
22679func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
22680	var m map[string]*json.RawMessage
22681	err := json.Unmarshal(body, &m)
22682	if err != nil {
22683		return err
22684	}
22685	for k, v := range m {
22686		switch k {
22687		case "properties":
22688			if v != nil {
22689				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
22690				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
22691				if err != nil {
22692					return err
22693				}
22694				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
22695			}
22696		case "name":
22697			if v != nil {
22698				var name string
22699				err = json.Unmarshal(*v, &name)
22700				if err != nil {
22701					return err
22702				}
22703				pec.Name = &name
22704			}
22705		case "type":
22706			if v != nil {
22707				var typeVar string
22708				err = json.Unmarshal(*v, &typeVar)
22709				if err != nil {
22710					return err
22711				}
22712				pec.Type = &typeVar
22713			}
22714		case "etag":
22715			if v != nil {
22716				var etag string
22717				err = json.Unmarshal(*v, &etag)
22718				if err != nil {
22719					return err
22720				}
22721				pec.Etag = &etag
22722			}
22723		case "id":
22724			if v != nil {
22725				var ID string
22726				err = json.Unmarshal(*v, &ID)
22727				if err != nil {
22728					return err
22729				}
22730				pec.ID = &ID
22731			}
22732		}
22733	}
22734
22735	return nil
22736}
22737
22738// PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties.
22739type PrivateEndpointConnectionProperties struct {
22740	// PrivateEndpoint - The resource of private end point.
22741	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
22742	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
22743	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
22744	// ProvisioningState - The provisioning state of the private endpoint connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22745	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22746}
22747
22748// PrivateEndpointListResult response for the ListPrivateEndpoints API service call.
22749type PrivateEndpointListResult struct {
22750	autorest.Response `json:"-"`
22751	// Value - A list of private endpoint resources in a resource group.
22752	Value *[]PrivateEndpoint `json:"value,omitempty"`
22753	// NextLink - READ-ONLY; The URL to get the next set of results.
22754	NextLink *string `json:"nextLink,omitempty"`
22755}
22756
22757// PrivateEndpointListResultIterator provides access to a complete listing of PrivateEndpoint values.
22758type PrivateEndpointListResultIterator struct {
22759	i    int
22760	page PrivateEndpointListResultPage
22761}
22762
22763// NextWithContext advances to the next value.  If there was an error making
22764// the request the iterator does not advance and the error is returned.
22765func (iter *PrivateEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
22766	if tracing.IsEnabled() {
22767		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultIterator.NextWithContext")
22768		defer func() {
22769			sc := -1
22770			if iter.Response().Response.Response != nil {
22771				sc = iter.Response().Response.Response.StatusCode
22772			}
22773			tracing.EndSpan(ctx, sc, err)
22774		}()
22775	}
22776	iter.i++
22777	if iter.i < len(iter.page.Values()) {
22778		return nil
22779	}
22780	err = iter.page.NextWithContext(ctx)
22781	if err != nil {
22782		iter.i--
22783		return err
22784	}
22785	iter.i = 0
22786	return nil
22787}
22788
22789// Next advances to the next value.  If there was an error making
22790// the request the iterator does not advance and the error is returned.
22791// Deprecated: Use NextWithContext() instead.
22792func (iter *PrivateEndpointListResultIterator) Next() error {
22793	return iter.NextWithContext(context.Background())
22794}
22795
22796// NotDone returns true if the enumeration should be started or is not yet complete.
22797func (iter PrivateEndpointListResultIterator) NotDone() bool {
22798	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22799}
22800
22801// Response returns the raw server response from the last page request.
22802func (iter PrivateEndpointListResultIterator) Response() PrivateEndpointListResult {
22803	return iter.page.Response()
22804}
22805
22806// Value returns the current value or a zero-initialized value if the
22807// iterator has advanced beyond the end of the collection.
22808func (iter PrivateEndpointListResultIterator) Value() PrivateEndpoint {
22809	if !iter.page.NotDone() {
22810		return PrivateEndpoint{}
22811	}
22812	return iter.page.Values()[iter.i]
22813}
22814
22815// Creates a new instance of the PrivateEndpointListResultIterator type.
22816func NewPrivateEndpointListResultIterator(page PrivateEndpointListResultPage) PrivateEndpointListResultIterator {
22817	return PrivateEndpointListResultIterator{page: page}
22818}
22819
22820// IsEmpty returns true if the ListResult contains no values.
22821func (pelr PrivateEndpointListResult) IsEmpty() bool {
22822	return pelr.Value == nil || len(*pelr.Value) == 0
22823}
22824
22825// privateEndpointListResultPreparer prepares a request to retrieve the next set of results.
22826// It returns nil if no more results exist.
22827func (pelr PrivateEndpointListResult) privateEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
22828	if pelr.NextLink == nil || len(to.String(pelr.NextLink)) < 1 {
22829		return nil, nil
22830	}
22831	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22832		autorest.AsJSON(),
22833		autorest.AsGet(),
22834		autorest.WithBaseURL(to.String(pelr.NextLink)))
22835}
22836
22837// PrivateEndpointListResultPage contains a page of PrivateEndpoint values.
22838type PrivateEndpointListResultPage struct {
22839	fn   func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)
22840	pelr PrivateEndpointListResult
22841}
22842
22843// NextWithContext advances to the next page of values.  If there was an error making
22844// the request the page does not advance and the error is returned.
22845func (page *PrivateEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
22846	if tracing.IsEnabled() {
22847		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultPage.NextWithContext")
22848		defer func() {
22849			sc := -1
22850			if page.Response().Response.Response != nil {
22851				sc = page.Response().Response.Response.StatusCode
22852			}
22853			tracing.EndSpan(ctx, sc, err)
22854		}()
22855	}
22856	next, err := page.fn(ctx, page.pelr)
22857	if err != nil {
22858		return err
22859	}
22860	page.pelr = next
22861	return nil
22862}
22863
22864// Next advances to the next page of values.  If there was an error making
22865// the request the page does not advance and the error is returned.
22866// Deprecated: Use NextWithContext() instead.
22867func (page *PrivateEndpointListResultPage) Next() error {
22868	return page.NextWithContext(context.Background())
22869}
22870
22871// NotDone returns true if the page enumeration should be started or is not yet complete.
22872func (page PrivateEndpointListResultPage) NotDone() bool {
22873	return !page.pelr.IsEmpty()
22874}
22875
22876// Response returns the raw server response from the last page request.
22877func (page PrivateEndpointListResultPage) Response() PrivateEndpointListResult {
22878	return page.pelr
22879}
22880
22881// Values returns the slice of values for the current page or nil if there are no values.
22882func (page PrivateEndpointListResultPage) Values() []PrivateEndpoint {
22883	if page.pelr.IsEmpty() {
22884		return nil
22885	}
22886	return *page.pelr.Value
22887}
22888
22889// Creates a new instance of the PrivateEndpointListResultPage type.
22890func NewPrivateEndpointListResultPage(getNextPage func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)) PrivateEndpointListResultPage {
22891	return PrivateEndpointListResultPage{fn: getNextPage}
22892}
22893
22894// PrivateEndpointProperties properties of the private endpoint.
22895type PrivateEndpointProperties struct {
22896	// Subnet - The ID of the subnet from which the private IP will be allocated.
22897	Subnet *Subnet `json:"subnet,omitempty"`
22898	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private endpoint.
22899	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
22900	// ProvisioningState - The provisioning state of the private endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
22901	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
22902	// PrivateLinkServiceConnections - A grouping of information about the connection to the remote resource.
22903	PrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"privateLinkServiceConnections,omitempty"`
22904	// 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.
22905	ManualPrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"manualPrivateLinkServiceConnections,omitempty"`
22906}
22907
22908// PrivateEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
22909// long-running operation.
22910type PrivateEndpointsCreateOrUpdateFuture struct {
22911	azure.Future
22912}
22913
22914// Result returns the result of the asynchronous operation.
22915// If the operation has not completed it will return an error.
22916func (future *PrivateEndpointsCreateOrUpdateFuture) Result(client PrivateEndpointsClient) (peVar PrivateEndpoint, err error) {
22917	var done bool
22918	done, err = future.DoneWithContext(context.Background(), client)
22919	if err != nil {
22920		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
22921		return
22922	}
22923	if !done {
22924		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsCreateOrUpdateFuture")
22925		return
22926	}
22927	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22928	if peVar.Response.Response, err = future.GetResult(sender); err == nil && peVar.Response.Response.StatusCode != http.StatusNoContent {
22929		peVar, err = client.CreateOrUpdateResponder(peVar.Response.Response)
22930		if err != nil {
22931			err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", peVar.Response.Response, "Failure responding to request")
22932		}
22933	}
22934	return
22935}
22936
22937// PrivateEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
22938// operation.
22939type PrivateEndpointsDeleteFuture struct {
22940	azure.Future
22941}
22942
22943// Result returns the result of the asynchronous operation.
22944// If the operation has not completed it will return an error.
22945func (future *PrivateEndpointsDeleteFuture) Result(client PrivateEndpointsClient) (ar autorest.Response, err error) {
22946	var done bool
22947	done, err = future.DoneWithContext(context.Background(), client)
22948	if err != nil {
22949		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
22950		return
22951	}
22952	if !done {
22953		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsDeleteFuture")
22954		return
22955	}
22956	ar.Response = future.Response()
22957	return
22958}
22959
22960// PrivateLinkService private link service resource.
22961type PrivateLinkService struct {
22962	autorest.Response `json:"-"`
22963	// PrivateLinkServiceProperties - Properties of the private link service.
22964	*PrivateLinkServiceProperties `json:"properties,omitempty"`
22965	// Etag - A unique read-only string that changes whenever the resource is updated.
22966	Etag *string `json:"etag,omitempty"`
22967	// ID - Resource ID.
22968	ID *string `json:"id,omitempty"`
22969	// Name - READ-ONLY; Resource name.
22970	Name *string `json:"name,omitempty"`
22971	// Type - READ-ONLY; Resource type.
22972	Type *string `json:"type,omitempty"`
22973	// Location - Resource location.
22974	Location *string `json:"location,omitempty"`
22975	// Tags - Resource tags.
22976	Tags map[string]*string `json:"tags"`
22977}
22978
22979// MarshalJSON is the custom marshaler for PrivateLinkService.
22980func (pls PrivateLinkService) MarshalJSON() ([]byte, error) {
22981	objectMap := make(map[string]interface{})
22982	if pls.PrivateLinkServiceProperties != nil {
22983		objectMap["properties"] = pls.PrivateLinkServiceProperties
22984	}
22985	if pls.Etag != nil {
22986		objectMap["etag"] = pls.Etag
22987	}
22988	if pls.ID != nil {
22989		objectMap["id"] = pls.ID
22990	}
22991	if pls.Location != nil {
22992		objectMap["location"] = pls.Location
22993	}
22994	if pls.Tags != nil {
22995		objectMap["tags"] = pls.Tags
22996	}
22997	return json.Marshal(objectMap)
22998}
22999
23000// UnmarshalJSON is the custom unmarshaler for PrivateLinkService struct.
23001func (pls *PrivateLinkService) UnmarshalJSON(body []byte) error {
23002	var m map[string]*json.RawMessage
23003	err := json.Unmarshal(body, &m)
23004	if err != nil {
23005		return err
23006	}
23007	for k, v := range m {
23008		switch k {
23009		case "properties":
23010			if v != nil {
23011				var privateLinkServiceProperties PrivateLinkServiceProperties
23012				err = json.Unmarshal(*v, &privateLinkServiceProperties)
23013				if err != nil {
23014					return err
23015				}
23016				pls.PrivateLinkServiceProperties = &privateLinkServiceProperties
23017			}
23018		case "etag":
23019			if v != nil {
23020				var etag string
23021				err = json.Unmarshal(*v, &etag)
23022				if err != nil {
23023					return err
23024				}
23025				pls.Etag = &etag
23026			}
23027		case "id":
23028			if v != nil {
23029				var ID string
23030				err = json.Unmarshal(*v, &ID)
23031				if err != nil {
23032					return err
23033				}
23034				pls.ID = &ID
23035			}
23036		case "name":
23037			if v != nil {
23038				var name string
23039				err = json.Unmarshal(*v, &name)
23040				if err != nil {
23041					return err
23042				}
23043				pls.Name = &name
23044			}
23045		case "type":
23046			if v != nil {
23047				var typeVar string
23048				err = json.Unmarshal(*v, &typeVar)
23049				if err != nil {
23050					return err
23051				}
23052				pls.Type = &typeVar
23053			}
23054		case "location":
23055			if v != nil {
23056				var location string
23057				err = json.Unmarshal(*v, &location)
23058				if err != nil {
23059					return err
23060				}
23061				pls.Location = &location
23062			}
23063		case "tags":
23064			if v != nil {
23065				var tags map[string]*string
23066				err = json.Unmarshal(*v, &tags)
23067				if err != nil {
23068					return err
23069				}
23070				pls.Tags = tags
23071			}
23072		}
23073	}
23074
23075	return nil
23076}
23077
23078// PrivateLinkServiceConnection privateLinkServiceConnection resource.
23079type PrivateLinkServiceConnection struct {
23080	// PrivateLinkServiceConnectionProperties - Properties of the private link service connection.
23081	*PrivateLinkServiceConnectionProperties `json:"properties,omitempty"`
23082	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
23083	Name *string `json:"name,omitempty"`
23084	// Type - READ-ONLY; The resource type.
23085	Type *string `json:"type,omitempty"`
23086	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23087	Etag *string `json:"etag,omitempty"`
23088	// ID - Resource ID.
23089	ID *string `json:"id,omitempty"`
23090}
23091
23092// MarshalJSON is the custom marshaler for PrivateLinkServiceConnection.
23093func (plsc PrivateLinkServiceConnection) MarshalJSON() ([]byte, error) {
23094	objectMap := make(map[string]interface{})
23095	if plsc.PrivateLinkServiceConnectionProperties != nil {
23096		objectMap["properties"] = plsc.PrivateLinkServiceConnectionProperties
23097	}
23098	if plsc.Name != nil {
23099		objectMap["name"] = plsc.Name
23100	}
23101	if plsc.ID != nil {
23102		objectMap["id"] = plsc.ID
23103	}
23104	return json.Marshal(objectMap)
23105}
23106
23107// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceConnection struct.
23108func (plsc *PrivateLinkServiceConnection) UnmarshalJSON(body []byte) error {
23109	var m map[string]*json.RawMessage
23110	err := json.Unmarshal(body, &m)
23111	if err != nil {
23112		return err
23113	}
23114	for k, v := range m {
23115		switch k {
23116		case "properties":
23117			if v != nil {
23118				var privateLinkServiceConnectionProperties PrivateLinkServiceConnectionProperties
23119				err = json.Unmarshal(*v, &privateLinkServiceConnectionProperties)
23120				if err != nil {
23121					return err
23122				}
23123				plsc.PrivateLinkServiceConnectionProperties = &privateLinkServiceConnectionProperties
23124			}
23125		case "name":
23126			if v != nil {
23127				var name string
23128				err = json.Unmarshal(*v, &name)
23129				if err != nil {
23130					return err
23131				}
23132				plsc.Name = &name
23133			}
23134		case "type":
23135			if v != nil {
23136				var typeVar string
23137				err = json.Unmarshal(*v, &typeVar)
23138				if err != nil {
23139					return err
23140				}
23141				plsc.Type = &typeVar
23142			}
23143		case "etag":
23144			if v != nil {
23145				var etag string
23146				err = json.Unmarshal(*v, &etag)
23147				if err != nil {
23148					return err
23149				}
23150				plsc.Etag = &etag
23151			}
23152		case "id":
23153			if v != nil {
23154				var ID string
23155				err = json.Unmarshal(*v, &ID)
23156				if err != nil {
23157					return err
23158				}
23159				plsc.ID = &ID
23160			}
23161		}
23162	}
23163
23164	return nil
23165}
23166
23167// PrivateLinkServiceConnectionProperties properties of the PrivateLinkServiceConnection.
23168type PrivateLinkServiceConnectionProperties struct {
23169	// ProvisioningState - The provisioning state of the private link service connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23170	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23171	// PrivateLinkServiceID - The resource id of private link service.
23172	PrivateLinkServiceID *string `json:"privateLinkServiceId,omitempty"`
23173	// GroupIds - The ID(s) of the group(s) obtained from the remote resource that this private endpoint should connect to.
23174	GroupIds *[]string `json:"groupIds,omitempty"`
23175	// RequestMessage - A message passed to the owner of the remote resource with this connection request. Restricted to 140 chars.
23176	RequestMessage *string `json:"requestMessage,omitempty"`
23177	// PrivateLinkServiceConnectionState - A collection of read-only information about the state of the connection to the remote resource.
23178	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
23179}
23180
23181// PrivateLinkServiceConnectionState a collection of information about the state of the connection between
23182// service consumer and provider.
23183type PrivateLinkServiceConnectionState struct {
23184	// Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.
23185	Status *string `json:"status,omitempty"`
23186	// Description - The reason for approval/rejection of the connection.
23187	Description *string `json:"description,omitempty"`
23188	// ActionRequired - A message indicating if changes on the service provider require any updates on the consumer.
23189	ActionRequired *string `json:"actionRequired,omitempty"`
23190}
23191
23192// PrivateLinkServiceIPConfiguration the private link service ip configuration.
23193type PrivateLinkServiceIPConfiguration struct {
23194	// PrivateLinkServiceIPConfigurationProperties - Properties of the private link service ip configuration.
23195	*PrivateLinkServiceIPConfigurationProperties `json:"properties,omitempty"`
23196	// Name - The name of private link service ip configuration.
23197	Name *string `json:"name,omitempty"`
23198	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
23199	Etag *string `json:"etag,omitempty"`
23200	// Type - READ-ONLY; The resource type.
23201	Type *string `json:"type,omitempty"`
23202	// ID - Resource ID.
23203	ID *string `json:"id,omitempty"`
23204}
23205
23206// MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfiguration.
23207func (plsic PrivateLinkServiceIPConfiguration) MarshalJSON() ([]byte, error) {
23208	objectMap := make(map[string]interface{})
23209	if plsic.PrivateLinkServiceIPConfigurationProperties != nil {
23210		objectMap["properties"] = plsic.PrivateLinkServiceIPConfigurationProperties
23211	}
23212	if plsic.Name != nil {
23213		objectMap["name"] = plsic.Name
23214	}
23215	if plsic.ID != nil {
23216		objectMap["id"] = plsic.ID
23217	}
23218	return json.Marshal(objectMap)
23219}
23220
23221// UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceIPConfiguration struct.
23222func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error {
23223	var m map[string]*json.RawMessage
23224	err := json.Unmarshal(body, &m)
23225	if err != nil {
23226		return err
23227	}
23228	for k, v := range m {
23229		switch k {
23230		case "properties":
23231			if v != nil {
23232				var privateLinkServiceIPConfigurationProperties PrivateLinkServiceIPConfigurationProperties
23233				err = json.Unmarshal(*v, &privateLinkServiceIPConfigurationProperties)
23234				if err != nil {
23235					return err
23236				}
23237				plsic.PrivateLinkServiceIPConfigurationProperties = &privateLinkServiceIPConfigurationProperties
23238			}
23239		case "name":
23240			if v != nil {
23241				var name string
23242				err = json.Unmarshal(*v, &name)
23243				if err != nil {
23244					return err
23245				}
23246				plsic.Name = &name
23247			}
23248		case "etag":
23249			if v != nil {
23250				var etag string
23251				err = json.Unmarshal(*v, &etag)
23252				if err != nil {
23253					return err
23254				}
23255				plsic.Etag = &etag
23256			}
23257		case "type":
23258			if v != nil {
23259				var typeVar string
23260				err = json.Unmarshal(*v, &typeVar)
23261				if err != nil {
23262					return err
23263				}
23264				plsic.Type = &typeVar
23265			}
23266		case "id":
23267			if v != nil {
23268				var ID string
23269				err = json.Unmarshal(*v, &ID)
23270				if err != nil {
23271					return err
23272				}
23273				plsic.ID = &ID
23274			}
23275		}
23276	}
23277
23278	return nil
23279}
23280
23281// PrivateLinkServiceIPConfigurationProperties properties of private link service IP configuration.
23282type PrivateLinkServiceIPConfigurationProperties struct {
23283	// PrivateIPAddress - The private IP address of the IP configuration.
23284	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
23285	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
23286	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
23287	// Subnet - The reference to the subnet resource.
23288	Subnet *Subnet `json:"subnet,omitempty"`
23289	// Primary - Whether the ip configuration is primary or not.
23290	Primary *bool `json:"primary,omitempty"`
23291	// ProvisioningState - The provisioning state of the private link service IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23292	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23293	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
23294	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
23295}
23296
23297// PrivateLinkServiceListResult response for the ListPrivateLinkService API service call.
23298type PrivateLinkServiceListResult struct {
23299	autorest.Response `json:"-"`
23300	// Value - A list of PrivateLinkService resources in a resource group.
23301	Value *[]PrivateLinkService `json:"value,omitempty"`
23302	// NextLink - READ-ONLY; The URL to get the next set of results.
23303	NextLink *string `json:"nextLink,omitempty"`
23304}
23305
23306// PrivateLinkServiceListResultIterator provides access to a complete listing of PrivateLinkService values.
23307type PrivateLinkServiceListResultIterator struct {
23308	i    int
23309	page PrivateLinkServiceListResultPage
23310}
23311
23312// NextWithContext advances to the next value.  If there was an error making
23313// the request the iterator does not advance and the error is returned.
23314func (iter *PrivateLinkServiceListResultIterator) NextWithContext(ctx context.Context) (err error) {
23315	if tracing.IsEnabled() {
23316		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultIterator.NextWithContext")
23317		defer func() {
23318			sc := -1
23319			if iter.Response().Response.Response != nil {
23320				sc = iter.Response().Response.Response.StatusCode
23321			}
23322			tracing.EndSpan(ctx, sc, err)
23323		}()
23324	}
23325	iter.i++
23326	if iter.i < len(iter.page.Values()) {
23327		return nil
23328	}
23329	err = iter.page.NextWithContext(ctx)
23330	if err != nil {
23331		iter.i--
23332		return err
23333	}
23334	iter.i = 0
23335	return nil
23336}
23337
23338// Next advances to the next value.  If there was an error making
23339// the request the iterator does not advance and the error is returned.
23340// Deprecated: Use NextWithContext() instead.
23341func (iter *PrivateLinkServiceListResultIterator) Next() error {
23342	return iter.NextWithContext(context.Background())
23343}
23344
23345// NotDone returns true if the enumeration should be started or is not yet complete.
23346func (iter PrivateLinkServiceListResultIterator) NotDone() bool {
23347	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23348}
23349
23350// Response returns the raw server response from the last page request.
23351func (iter PrivateLinkServiceListResultIterator) Response() PrivateLinkServiceListResult {
23352	return iter.page.Response()
23353}
23354
23355// Value returns the current value or a zero-initialized value if the
23356// iterator has advanced beyond the end of the collection.
23357func (iter PrivateLinkServiceListResultIterator) Value() PrivateLinkService {
23358	if !iter.page.NotDone() {
23359		return PrivateLinkService{}
23360	}
23361	return iter.page.Values()[iter.i]
23362}
23363
23364// Creates a new instance of the PrivateLinkServiceListResultIterator type.
23365func NewPrivateLinkServiceListResultIterator(page PrivateLinkServiceListResultPage) PrivateLinkServiceListResultIterator {
23366	return PrivateLinkServiceListResultIterator{page: page}
23367}
23368
23369// IsEmpty returns true if the ListResult contains no values.
23370func (plslr PrivateLinkServiceListResult) IsEmpty() bool {
23371	return plslr.Value == nil || len(*plslr.Value) == 0
23372}
23373
23374// privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results.
23375// It returns nil if no more results exist.
23376func (plslr PrivateLinkServiceListResult) privateLinkServiceListResultPreparer(ctx context.Context) (*http.Request, error) {
23377	if plslr.NextLink == nil || len(to.String(plslr.NextLink)) < 1 {
23378		return nil, nil
23379	}
23380	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23381		autorest.AsJSON(),
23382		autorest.AsGet(),
23383		autorest.WithBaseURL(to.String(plslr.NextLink)))
23384}
23385
23386// PrivateLinkServiceListResultPage contains a page of PrivateLinkService values.
23387type PrivateLinkServiceListResultPage struct {
23388	fn    func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)
23389	plslr PrivateLinkServiceListResult
23390}
23391
23392// NextWithContext advances to the next page of values.  If there was an error making
23393// the request the page does not advance and the error is returned.
23394func (page *PrivateLinkServiceListResultPage) NextWithContext(ctx context.Context) (err error) {
23395	if tracing.IsEnabled() {
23396		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultPage.NextWithContext")
23397		defer func() {
23398			sc := -1
23399			if page.Response().Response.Response != nil {
23400				sc = page.Response().Response.Response.StatusCode
23401			}
23402			tracing.EndSpan(ctx, sc, err)
23403		}()
23404	}
23405	next, err := page.fn(ctx, page.plslr)
23406	if err != nil {
23407		return err
23408	}
23409	page.plslr = next
23410	return nil
23411}
23412
23413// Next advances to the next page of values.  If there was an error making
23414// the request the page does not advance and the error is returned.
23415// Deprecated: Use NextWithContext() instead.
23416func (page *PrivateLinkServiceListResultPage) Next() error {
23417	return page.NextWithContext(context.Background())
23418}
23419
23420// NotDone returns true if the page enumeration should be started or is not yet complete.
23421func (page PrivateLinkServiceListResultPage) NotDone() bool {
23422	return !page.plslr.IsEmpty()
23423}
23424
23425// Response returns the raw server response from the last page request.
23426func (page PrivateLinkServiceListResultPage) Response() PrivateLinkServiceListResult {
23427	return page.plslr
23428}
23429
23430// Values returns the slice of values for the current page or nil if there are no values.
23431func (page PrivateLinkServiceListResultPage) Values() []PrivateLinkService {
23432	if page.plslr.IsEmpty() {
23433		return nil
23434	}
23435	return *page.plslr.Value
23436}
23437
23438// Creates a new instance of the PrivateLinkServiceListResultPage type.
23439func NewPrivateLinkServiceListResultPage(getNextPage func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)) PrivateLinkServiceListResultPage {
23440	return PrivateLinkServiceListResultPage{fn: getNextPage}
23441}
23442
23443// PrivateLinkServiceProperties properties of the private link service.
23444type PrivateLinkServiceProperties struct {
23445	// LoadBalancerFrontendIPConfigurations - An array of references to the load balancer IP configurations.
23446	LoadBalancerFrontendIPConfigurations *[]FrontendIPConfiguration `json:"loadBalancerFrontendIpConfigurations,omitempty"`
23447	// IPConfigurations - An array of private link service IP configurations.
23448	IPConfigurations *[]PrivateLinkServiceIPConfiguration `json:"ipConfigurations,omitempty"`
23449	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private link service.
23450	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
23451	// ProvisioningState - The provisioning state of the private link service resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23452	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23453	// PrivateEndpointConnections - An array of list about connections to the private endpoint.
23454	PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
23455	// Visibility - The visibility list of the private link service.
23456	Visibility *PrivateLinkServicePropertiesVisibility `json:"visibility,omitempty"`
23457	// AutoApproval - The auto-approval list of the private link service.
23458	AutoApproval *PrivateLinkServicePropertiesAutoApproval `json:"autoApproval,omitempty"`
23459	// Fqdns - The list of Fqdn.
23460	Fqdns *[]string `json:"fqdns,omitempty"`
23461	// Alias - READ-ONLY; The alias of the private link service.
23462	Alias *string `json:"alias,omitempty"`
23463}
23464
23465// PrivateLinkServicePropertiesAutoApproval the auto-approval list of the private link service.
23466type PrivateLinkServicePropertiesAutoApproval struct {
23467	// Subscriptions - The list of subscriptions.
23468	Subscriptions *[]string `json:"subscriptions,omitempty"`
23469}
23470
23471// PrivateLinkServicePropertiesVisibility the visibility list of the private link service.
23472type PrivateLinkServicePropertiesVisibility struct {
23473	// Subscriptions - The list of subscriptions.
23474	Subscriptions *[]string `json:"subscriptions,omitempty"`
23475}
23476
23477// PrivateLinkServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
23478// long-running operation.
23479type PrivateLinkServicesCreateOrUpdateFuture struct {
23480	azure.Future
23481}
23482
23483// Result returns the result of the asynchronous operation.
23484// If the operation has not completed it will return an error.
23485func (future *PrivateLinkServicesCreateOrUpdateFuture) Result(client PrivateLinkServicesClient) (pls PrivateLinkService, err error) {
23486	var done bool
23487	done, err = future.DoneWithContext(context.Background(), client)
23488	if err != nil {
23489		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
23490		return
23491	}
23492	if !done {
23493		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCreateOrUpdateFuture")
23494		return
23495	}
23496	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23497	if pls.Response.Response, err = future.GetResult(sender); err == nil && pls.Response.Response.StatusCode != http.StatusNoContent {
23498		pls, err = client.CreateOrUpdateResponder(pls.Response.Response)
23499		if err != nil {
23500			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", pls.Response.Response, "Failure responding to request")
23501		}
23502	}
23503	return
23504}
23505
23506// PrivateLinkServicesDeleteFuture an abstraction for monitoring and retrieving the results of a
23507// long-running operation.
23508type PrivateLinkServicesDeleteFuture struct {
23509	azure.Future
23510}
23511
23512// Result returns the result of the asynchronous operation.
23513// If the operation has not completed it will return an error.
23514func (future *PrivateLinkServicesDeleteFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
23515	var done bool
23516	done, err = future.DoneWithContext(context.Background(), client)
23517	if err != nil {
23518		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeleteFuture", "Result", future.Response(), "Polling failure")
23519		return
23520	}
23521	if !done {
23522		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeleteFuture")
23523		return
23524	}
23525	ar.Response = future.Response()
23526	return
23527}
23528
23529// PrivateLinkServicesDeletePrivateEndpointConnectionFuture an abstraction for monitoring and retrieving
23530// the results of a long-running operation.
23531type PrivateLinkServicesDeletePrivateEndpointConnectionFuture struct {
23532	azure.Future
23533}
23534
23535// Result returns the result of the asynchronous operation.
23536// If the operation has not completed it will return an error.
23537func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) Result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
23538	var done bool
23539	done, err = future.DoneWithContext(context.Background(), client)
23540	if err != nil {
23541		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure")
23542		return
23543	}
23544	if !done {
23545		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture")
23546		return
23547	}
23548	ar.Response = future.Response()
23549	return
23550}
23551
23552// PrivateLinkServiceVisibility response for the CheckPrivateLinkServiceVisibility API service call.
23553type PrivateLinkServiceVisibility struct {
23554	autorest.Response `json:"-"`
23555	// Visible - Private Link Service Visibility (True/False).
23556	Visible *bool `json:"visible,omitempty"`
23557}
23558
23559// Probe a load balancer probe.
23560type Probe struct {
23561	autorest.Response `json:"-"`
23562	// ProbePropertiesFormat - Properties of load balancer probe.
23563	*ProbePropertiesFormat `json:"properties,omitempty"`
23564	// 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.
23565	Name *string `json:"name,omitempty"`
23566	// Etag - A unique read-only string that changes whenever the resource is updated.
23567	Etag *string `json:"etag,omitempty"`
23568	// Type - READ-ONLY; Type of the resource.
23569	Type *string `json:"type,omitempty"`
23570	// ID - Resource ID.
23571	ID *string `json:"id,omitempty"`
23572}
23573
23574// MarshalJSON is the custom marshaler for Probe.
23575func (p Probe) MarshalJSON() ([]byte, error) {
23576	objectMap := make(map[string]interface{})
23577	if p.ProbePropertiesFormat != nil {
23578		objectMap["properties"] = p.ProbePropertiesFormat
23579	}
23580	if p.Name != nil {
23581		objectMap["name"] = p.Name
23582	}
23583	if p.Etag != nil {
23584		objectMap["etag"] = p.Etag
23585	}
23586	if p.ID != nil {
23587		objectMap["id"] = p.ID
23588	}
23589	return json.Marshal(objectMap)
23590}
23591
23592// UnmarshalJSON is the custom unmarshaler for Probe struct.
23593func (p *Probe) UnmarshalJSON(body []byte) error {
23594	var m map[string]*json.RawMessage
23595	err := json.Unmarshal(body, &m)
23596	if err != nil {
23597		return err
23598	}
23599	for k, v := range m {
23600		switch k {
23601		case "properties":
23602			if v != nil {
23603				var probePropertiesFormat ProbePropertiesFormat
23604				err = json.Unmarshal(*v, &probePropertiesFormat)
23605				if err != nil {
23606					return err
23607				}
23608				p.ProbePropertiesFormat = &probePropertiesFormat
23609			}
23610		case "name":
23611			if v != nil {
23612				var name string
23613				err = json.Unmarshal(*v, &name)
23614				if err != nil {
23615					return err
23616				}
23617				p.Name = &name
23618			}
23619		case "etag":
23620			if v != nil {
23621				var etag string
23622				err = json.Unmarshal(*v, &etag)
23623				if err != nil {
23624					return err
23625				}
23626				p.Etag = &etag
23627			}
23628		case "type":
23629			if v != nil {
23630				var typeVar string
23631				err = json.Unmarshal(*v, &typeVar)
23632				if err != nil {
23633					return err
23634				}
23635				p.Type = &typeVar
23636			}
23637		case "id":
23638			if v != nil {
23639				var ID string
23640				err = json.Unmarshal(*v, &ID)
23641				if err != nil {
23642					return err
23643				}
23644				p.ID = &ID
23645			}
23646		}
23647	}
23648
23649	return nil
23650}
23651
23652// ProbePropertiesFormat load balancer probe resource.
23653type ProbePropertiesFormat struct {
23654	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
23655	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
23656	// 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'
23657	Protocol ProbeProtocol `json:"protocol,omitempty"`
23658	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
23659	Port *int32 `json:"port,omitempty"`
23660	// 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.
23661	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
23662	// 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.
23663	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
23664	// 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.
23665	RequestPath *string `json:"requestPath,omitempty"`
23666	// ProvisioningState - The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23667	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23668}
23669
23670// Profile network profile resource.
23671type Profile struct {
23672	autorest.Response `json:"-"`
23673	// ProfilePropertiesFormat - Network profile properties.
23674	*ProfilePropertiesFormat `json:"properties,omitempty"`
23675	// Etag - A unique read-only string that changes whenever the resource is updated.
23676	Etag *string `json:"etag,omitempty"`
23677	// ID - Resource ID.
23678	ID *string `json:"id,omitempty"`
23679	// Name - READ-ONLY; Resource name.
23680	Name *string `json:"name,omitempty"`
23681	// Type - READ-ONLY; Resource type.
23682	Type *string `json:"type,omitempty"`
23683	// Location - Resource location.
23684	Location *string `json:"location,omitempty"`
23685	// Tags - Resource tags.
23686	Tags map[string]*string `json:"tags"`
23687}
23688
23689// MarshalJSON is the custom marshaler for Profile.
23690func (p Profile) MarshalJSON() ([]byte, error) {
23691	objectMap := make(map[string]interface{})
23692	if p.ProfilePropertiesFormat != nil {
23693		objectMap["properties"] = p.ProfilePropertiesFormat
23694	}
23695	if p.Etag != nil {
23696		objectMap["etag"] = p.Etag
23697	}
23698	if p.ID != nil {
23699		objectMap["id"] = p.ID
23700	}
23701	if p.Location != nil {
23702		objectMap["location"] = p.Location
23703	}
23704	if p.Tags != nil {
23705		objectMap["tags"] = p.Tags
23706	}
23707	return json.Marshal(objectMap)
23708}
23709
23710// UnmarshalJSON is the custom unmarshaler for Profile struct.
23711func (p *Profile) UnmarshalJSON(body []byte) error {
23712	var m map[string]*json.RawMessage
23713	err := json.Unmarshal(body, &m)
23714	if err != nil {
23715		return err
23716	}
23717	for k, v := range m {
23718		switch k {
23719		case "properties":
23720			if v != nil {
23721				var profilePropertiesFormat ProfilePropertiesFormat
23722				err = json.Unmarshal(*v, &profilePropertiesFormat)
23723				if err != nil {
23724					return err
23725				}
23726				p.ProfilePropertiesFormat = &profilePropertiesFormat
23727			}
23728		case "etag":
23729			if v != nil {
23730				var etag string
23731				err = json.Unmarshal(*v, &etag)
23732				if err != nil {
23733					return err
23734				}
23735				p.Etag = &etag
23736			}
23737		case "id":
23738			if v != nil {
23739				var ID string
23740				err = json.Unmarshal(*v, &ID)
23741				if err != nil {
23742					return err
23743				}
23744				p.ID = &ID
23745			}
23746		case "name":
23747			if v != nil {
23748				var name string
23749				err = json.Unmarshal(*v, &name)
23750				if err != nil {
23751					return err
23752				}
23753				p.Name = &name
23754			}
23755		case "type":
23756			if v != nil {
23757				var typeVar string
23758				err = json.Unmarshal(*v, &typeVar)
23759				if err != nil {
23760					return err
23761				}
23762				p.Type = &typeVar
23763			}
23764		case "location":
23765			if v != nil {
23766				var location string
23767				err = json.Unmarshal(*v, &location)
23768				if err != nil {
23769					return err
23770				}
23771				p.Location = &location
23772			}
23773		case "tags":
23774			if v != nil {
23775				var tags map[string]*string
23776				err = json.Unmarshal(*v, &tags)
23777				if err != nil {
23778					return err
23779				}
23780				p.Tags = tags
23781			}
23782		}
23783	}
23784
23785	return nil
23786}
23787
23788// ProfileListResult response for ListNetworkProfiles API service call.
23789type ProfileListResult struct {
23790	autorest.Response `json:"-"`
23791	// Value - A list of network profiles that exist in a resource group.
23792	Value *[]Profile `json:"value,omitempty"`
23793	// NextLink - The URL to get the next set of results.
23794	NextLink *string `json:"nextLink,omitempty"`
23795}
23796
23797// ProfileListResultIterator provides access to a complete listing of Profile values.
23798type ProfileListResultIterator struct {
23799	i    int
23800	page ProfileListResultPage
23801}
23802
23803// NextWithContext advances to the next value.  If there was an error making
23804// the request the iterator does not advance and the error is returned.
23805func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
23806	if tracing.IsEnabled() {
23807		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
23808		defer func() {
23809			sc := -1
23810			if iter.Response().Response.Response != nil {
23811				sc = iter.Response().Response.Response.StatusCode
23812			}
23813			tracing.EndSpan(ctx, sc, err)
23814		}()
23815	}
23816	iter.i++
23817	if iter.i < len(iter.page.Values()) {
23818		return nil
23819	}
23820	err = iter.page.NextWithContext(ctx)
23821	if err != nil {
23822		iter.i--
23823		return err
23824	}
23825	iter.i = 0
23826	return nil
23827}
23828
23829// Next advances to the next value.  If there was an error making
23830// the request the iterator does not advance and the error is returned.
23831// Deprecated: Use NextWithContext() instead.
23832func (iter *ProfileListResultIterator) Next() error {
23833	return iter.NextWithContext(context.Background())
23834}
23835
23836// NotDone returns true if the enumeration should be started or is not yet complete.
23837func (iter ProfileListResultIterator) NotDone() bool {
23838	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23839}
23840
23841// Response returns the raw server response from the last page request.
23842func (iter ProfileListResultIterator) Response() ProfileListResult {
23843	return iter.page.Response()
23844}
23845
23846// Value returns the current value or a zero-initialized value if the
23847// iterator has advanced beyond the end of the collection.
23848func (iter ProfileListResultIterator) Value() Profile {
23849	if !iter.page.NotDone() {
23850		return Profile{}
23851	}
23852	return iter.page.Values()[iter.i]
23853}
23854
23855// Creates a new instance of the ProfileListResultIterator type.
23856func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
23857	return ProfileListResultIterator{page: page}
23858}
23859
23860// IsEmpty returns true if the ListResult contains no values.
23861func (plr ProfileListResult) IsEmpty() bool {
23862	return plr.Value == nil || len(*plr.Value) == 0
23863}
23864
23865// profileListResultPreparer prepares a request to retrieve the next set of results.
23866// It returns nil if no more results exist.
23867func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
23868	if plr.NextLink == nil || len(to.String(plr.NextLink)) < 1 {
23869		return nil, nil
23870	}
23871	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23872		autorest.AsJSON(),
23873		autorest.AsGet(),
23874		autorest.WithBaseURL(to.String(plr.NextLink)))
23875}
23876
23877// ProfileListResultPage contains a page of Profile values.
23878type ProfileListResultPage struct {
23879	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
23880	plr ProfileListResult
23881}
23882
23883// NextWithContext advances to the next page of values.  If there was an error making
23884// the request the page does not advance and the error is returned.
23885func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
23886	if tracing.IsEnabled() {
23887		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
23888		defer func() {
23889			sc := -1
23890			if page.Response().Response.Response != nil {
23891				sc = page.Response().Response.Response.StatusCode
23892			}
23893			tracing.EndSpan(ctx, sc, err)
23894		}()
23895	}
23896	next, err := page.fn(ctx, page.plr)
23897	if err != nil {
23898		return err
23899	}
23900	page.plr = next
23901	return nil
23902}
23903
23904// Next advances to the next page of values.  If there was an error making
23905// the request the page does not advance and the error is returned.
23906// Deprecated: Use NextWithContext() instead.
23907func (page *ProfileListResultPage) Next() error {
23908	return page.NextWithContext(context.Background())
23909}
23910
23911// NotDone returns true if the page enumeration should be started or is not yet complete.
23912func (page ProfileListResultPage) NotDone() bool {
23913	return !page.plr.IsEmpty()
23914}
23915
23916// Response returns the raw server response from the last page request.
23917func (page ProfileListResultPage) Response() ProfileListResult {
23918	return page.plr
23919}
23920
23921// Values returns the slice of values for the current page or nil if there are no values.
23922func (page ProfileListResultPage) Values() []Profile {
23923	if page.plr.IsEmpty() {
23924		return nil
23925	}
23926	return *page.plr.Value
23927}
23928
23929// Creates a new instance of the ProfileListResultPage type.
23930func NewProfileListResultPage(getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
23931	return ProfileListResultPage{fn: getNextPage}
23932}
23933
23934// ProfilePropertiesFormat network profile properties.
23935type ProfilePropertiesFormat struct {
23936	// ContainerNetworkInterfaces - List of child container network interfaces.
23937	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
23938	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
23939	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
23940	// ResourceGUID - READ-ONLY; The resource GUID property of the network profile resource.
23941	ResourceGUID *string `json:"resourceGuid,omitempty"`
23942	// ProvisioningState - READ-ONLY; The provisioning state of the network profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
23943	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
23944}
23945
23946// ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
23947// operation.
23948type ProfilesDeleteFuture struct {
23949	azure.Future
23950}
23951
23952// Result returns the result of the asynchronous operation.
23953// If the operation has not completed it will return an error.
23954func (future *ProfilesDeleteFuture) Result(client ProfilesClient) (ar autorest.Response, err error) {
23955	var done bool
23956	done, err = future.DoneWithContext(context.Background(), client)
23957	if err != nil {
23958		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
23959		return
23960	}
23961	if !done {
23962		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
23963		return
23964	}
23965	ar.Response = future.Response()
23966	return
23967}
23968
23969// ProtocolConfiguration configuration of the protocol.
23970type ProtocolConfiguration struct {
23971	// HTTPConfiguration - HTTP configuration of the connectivity check.
23972	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
23973}
23974
23975// ProtocolCustomSettingsFormat dDoS custom policy properties.
23976type ProtocolCustomSettingsFormat struct {
23977	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
23978	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
23979	// TriggerRateOverride - The customized DDoS protection trigger rate.
23980	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
23981	// SourceRateOverride - The customized DDoS protection source rate.
23982	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
23983	// 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'
23984	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
23985}
23986
23987// PublicIPAddress public IP address resource.
23988type PublicIPAddress struct {
23989	autorest.Response `json:"-"`
23990	// Sku - The public IP address SKU.
23991	Sku *PublicIPAddressSku `json:"sku,omitempty"`
23992	// PublicIPAddressPropertiesFormat - Public IP address properties.
23993	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
23994	// Etag - A unique read-only string that changes whenever the resource is updated.
23995	Etag *string `json:"etag,omitempty"`
23996	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
23997	Zones *[]string `json:"zones,omitempty"`
23998	// ID - Resource ID.
23999	ID *string `json:"id,omitempty"`
24000	// Name - READ-ONLY; Resource name.
24001	Name *string `json:"name,omitempty"`
24002	// Type - READ-ONLY; Resource type.
24003	Type *string `json:"type,omitempty"`
24004	// Location - Resource location.
24005	Location *string `json:"location,omitempty"`
24006	// Tags - Resource tags.
24007	Tags map[string]*string `json:"tags"`
24008}
24009
24010// MarshalJSON is the custom marshaler for PublicIPAddress.
24011func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
24012	objectMap := make(map[string]interface{})
24013	if pia.Sku != nil {
24014		objectMap["sku"] = pia.Sku
24015	}
24016	if pia.PublicIPAddressPropertiesFormat != nil {
24017		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
24018	}
24019	if pia.Etag != nil {
24020		objectMap["etag"] = pia.Etag
24021	}
24022	if pia.Zones != nil {
24023		objectMap["zones"] = pia.Zones
24024	}
24025	if pia.ID != nil {
24026		objectMap["id"] = pia.ID
24027	}
24028	if pia.Location != nil {
24029		objectMap["location"] = pia.Location
24030	}
24031	if pia.Tags != nil {
24032		objectMap["tags"] = pia.Tags
24033	}
24034	return json.Marshal(objectMap)
24035}
24036
24037// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
24038func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
24039	var m map[string]*json.RawMessage
24040	err := json.Unmarshal(body, &m)
24041	if err != nil {
24042		return err
24043	}
24044	for k, v := range m {
24045		switch k {
24046		case "sku":
24047			if v != nil {
24048				var sku PublicIPAddressSku
24049				err = json.Unmarshal(*v, &sku)
24050				if err != nil {
24051					return err
24052				}
24053				pia.Sku = &sku
24054			}
24055		case "properties":
24056			if v != nil {
24057				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
24058				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
24059				if err != nil {
24060					return err
24061				}
24062				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
24063			}
24064		case "etag":
24065			if v != nil {
24066				var etag string
24067				err = json.Unmarshal(*v, &etag)
24068				if err != nil {
24069					return err
24070				}
24071				pia.Etag = &etag
24072			}
24073		case "zones":
24074			if v != nil {
24075				var zones []string
24076				err = json.Unmarshal(*v, &zones)
24077				if err != nil {
24078					return err
24079				}
24080				pia.Zones = &zones
24081			}
24082		case "id":
24083			if v != nil {
24084				var ID string
24085				err = json.Unmarshal(*v, &ID)
24086				if err != nil {
24087					return err
24088				}
24089				pia.ID = &ID
24090			}
24091		case "name":
24092			if v != nil {
24093				var name string
24094				err = json.Unmarshal(*v, &name)
24095				if err != nil {
24096					return err
24097				}
24098				pia.Name = &name
24099			}
24100		case "type":
24101			if v != nil {
24102				var typeVar string
24103				err = json.Unmarshal(*v, &typeVar)
24104				if err != nil {
24105					return err
24106				}
24107				pia.Type = &typeVar
24108			}
24109		case "location":
24110			if v != nil {
24111				var location string
24112				err = json.Unmarshal(*v, &location)
24113				if err != nil {
24114					return err
24115				}
24116				pia.Location = &location
24117			}
24118		case "tags":
24119			if v != nil {
24120				var tags map[string]*string
24121				err = json.Unmarshal(*v, &tags)
24122				if err != nil {
24123					return err
24124				}
24125				pia.Tags = tags
24126			}
24127		}
24128	}
24129
24130	return nil
24131}
24132
24133// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address.
24134type PublicIPAddressDNSSettings struct {
24135	// 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.
24136	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
24137	// 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.
24138	Fqdn *string `json:"fqdn,omitempty"`
24139	// 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.
24140	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
24141}
24142
24143// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24144// long-running operation.
24145type PublicIPAddressesCreateOrUpdateFuture struct {
24146	azure.Future
24147}
24148
24149// Result returns the result of the asynchronous operation.
24150// If the operation has not completed it will return an error.
24151func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
24152	var done bool
24153	done, err = future.DoneWithContext(context.Background(), client)
24154	if err != nil {
24155		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24156		return
24157	}
24158	if !done {
24159		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
24160		return
24161	}
24162	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24163	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
24164		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
24165		if err != nil {
24166			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
24167		}
24168	}
24169	return
24170}
24171
24172// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24173// operation.
24174type PublicIPAddressesDeleteFuture struct {
24175	azure.Future
24176}
24177
24178// Result returns the result of the asynchronous operation.
24179// If the operation has not completed it will return an error.
24180func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
24181	var done bool
24182	done, err = future.DoneWithContext(context.Background(), client)
24183	if err != nil {
24184		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
24185		return
24186	}
24187	if !done {
24188		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
24189		return
24190	}
24191	ar.Response = future.Response()
24192	return
24193}
24194
24195// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
24196// long-running operation.
24197type PublicIPAddressesUpdateTagsFuture struct {
24198	azure.Future
24199}
24200
24201// Result returns the result of the asynchronous operation.
24202// If the operation has not completed it will return an error.
24203func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
24204	var done bool
24205	done, err = future.DoneWithContext(context.Background(), client)
24206	if err != nil {
24207		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24208		return
24209	}
24210	if !done {
24211		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
24212		return
24213	}
24214	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24215	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
24216		pia, err = client.UpdateTagsResponder(pia.Response.Response)
24217		if err != nil {
24218			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
24219		}
24220	}
24221	return
24222}
24223
24224// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
24225type PublicIPAddressListResult struct {
24226	autorest.Response `json:"-"`
24227	// Value - A list of public IP addresses that exists in a resource group.
24228	Value *[]PublicIPAddress `json:"value,omitempty"`
24229	// NextLink - The URL to get the next set of results.
24230	NextLink *string `json:"nextLink,omitempty"`
24231}
24232
24233// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
24234type PublicIPAddressListResultIterator struct {
24235	i    int
24236	page PublicIPAddressListResultPage
24237}
24238
24239// NextWithContext advances to the next value.  If there was an error making
24240// the request the iterator does not advance and the error is returned.
24241func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
24242	if tracing.IsEnabled() {
24243		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
24244		defer func() {
24245			sc := -1
24246			if iter.Response().Response.Response != nil {
24247				sc = iter.Response().Response.Response.StatusCode
24248			}
24249			tracing.EndSpan(ctx, sc, err)
24250		}()
24251	}
24252	iter.i++
24253	if iter.i < len(iter.page.Values()) {
24254		return nil
24255	}
24256	err = iter.page.NextWithContext(ctx)
24257	if err != nil {
24258		iter.i--
24259		return err
24260	}
24261	iter.i = 0
24262	return nil
24263}
24264
24265// Next advances to the next value.  If there was an error making
24266// the request the iterator does not advance and the error is returned.
24267// Deprecated: Use NextWithContext() instead.
24268func (iter *PublicIPAddressListResultIterator) Next() error {
24269	return iter.NextWithContext(context.Background())
24270}
24271
24272// NotDone returns true if the enumeration should be started or is not yet complete.
24273func (iter PublicIPAddressListResultIterator) NotDone() bool {
24274	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24275}
24276
24277// Response returns the raw server response from the last page request.
24278func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
24279	return iter.page.Response()
24280}
24281
24282// Value returns the current value or a zero-initialized value if the
24283// iterator has advanced beyond the end of the collection.
24284func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
24285	if !iter.page.NotDone() {
24286		return PublicIPAddress{}
24287	}
24288	return iter.page.Values()[iter.i]
24289}
24290
24291// Creates a new instance of the PublicIPAddressListResultIterator type.
24292func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
24293	return PublicIPAddressListResultIterator{page: page}
24294}
24295
24296// IsEmpty returns true if the ListResult contains no values.
24297func (pialr PublicIPAddressListResult) IsEmpty() bool {
24298	return pialr.Value == nil || len(*pialr.Value) == 0
24299}
24300
24301// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
24302// It returns nil if no more results exist.
24303func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
24304	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
24305		return nil, nil
24306	}
24307	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24308		autorest.AsJSON(),
24309		autorest.AsGet(),
24310		autorest.WithBaseURL(to.String(pialr.NextLink)))
24311}
24312
24313// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
24314type PublicIPAddressListResultPage struct {
24315	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
24316	pialr PublicIPAddressListResult
24317}
24318
24319// NextWithContext advances to the next page of values.  If there was an error making
24320// the request the page does not advance and the error is returned.
24321func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
24322	if tracing.IsEnabled() {
24323		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
24324		defer func() {
24325			sc := -1
24326			if page.Response().Response.Response != nil {
24327				sc = page.Response().Response.Response.StatusCode
24328			}
24329			tracing.EndSpan(ctx, sc, err)
24330		}()
24331	}
24332	next, err := page.fn(ctx, page.pialr)
24333	if err != nil {
24334		return err
24335	}
24336	page.pialr = next
24337	return nil
24338}
24339
24340// Next advances to the next page of values.  If there was an error making
24341// the request the page does not advance and the error is returned.
24342// Deprecated: Use NextWithContext() instead.
24343func (page *PublicIPAddressListResultPage) Next() error {
24344	return page.NextWithContext(context.Background())
24345}
24346
24347// NotDone returns true if the page enumeration should be started or is not yet complete.
24348func (page PublicIPAddressListResultPage) NotDone() bool {
24349	return !page.pialr.IsEmpty()
24350}
24351
24352// Response returns the raw server response from the last page request.
24353func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
24354	return page.pialr
24355}
24356
24357// Values returns the slice of values for the current page or nil if there are no values.
24358func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
24359	if page.pialr.IsEmpty() {
24360		return nil
24361	}
24362	return *page.pialr.Value
24363}
24364
24365// Creates a new instance of the PublicIPAddressListResultPage type.
24366func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
24367	return PublicIPAddressListResultPage{fn: getNextPage}
24368}
24369
24370// PublicIPAddressPropertiesFormat public IP address properties.
24371type PublicIPAddressPropertiesFormat struct {
24372	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
24373	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
24374	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
24375	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
24376	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
24377	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
24378	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
24379	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
24380	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
24381	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
24382	// IPTags - The list of tags associated with the public IP address.
24383	IPTags *[]IPTag `json:"ipTags,omitempty"`
24384	// IPAddress - The IP address associated with the public IP address resource.
24385	IPAddress *string `json:"ipAddress,omitempty"`
24386	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
24387	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
24388	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
24389	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
24390	// ResourceGUID - The resource GUID property of the public IP address resource.
24391	ResourceGUID *string `json:"resourceGuid,omitempty"`
24392	// ProvisioningState - The provisioning state of the public IP address resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24393	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24394}
24395
24396// PublicIPAddressSku SKU of a public IP address.
24397type PublicIPAddressSku struct {
24398	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
24399	Name PublicIPAddressSkuName `json:"name,omitempty"`
24400}
24401
24402// PublicIPPrefix public IP prefix resource.
24403type PublicIPPrefix struct {
24404	autorest.Response `json:"-"`
24405	// Sku - The public IP prefix SKU.
24406	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
24407	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
24408	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
24409	// Etag - A unique read-only string that changes whenever the resource is updated.
24410	Etag *string `json:"etag,omitempty"`
24411	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
24412	Zones *[]string `json:"zones,omitempty"`
24413	// ID - Resource ID.
24414	ID *string `json:"id,omitempty"`
24415	// Name - READ-ONLY; Resource name.
24416	Name *string `json:"name,omitempty"`
24417	// Type - READ-ONLY; Resource type.
24418	Type *string `json:"type,omitempty"`
24419	// Location - Resource location.
24420	Location *string `json:"location,omitempty"`
24421	// Tags - Resource tags.
24422	Tags map[string]*string `json:"tags"`
24423}
24424
24425// MarshalJSON is the custom marshaler for PublicIPPrefix.
24426func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
24427	objectMap := make(map[string]interface{})
24428	if pip.Sku != nil {
24429		objectMap["sku"] = pip.Sku
24430	}
24431	if pip.PublicIPPrefixPropertiesFormat != nil {
24432		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
24433	}
24434	if pip.Etag != nil {
24435		objectMap["etag"] = pip.Etag
24436	}
24437	if pip.Zones != nil {
24438		objectMap["zones"] = pip.Zones
24439	}
24440	if pip.ID != nil {
24441		objectMap["id"] = pip.ID
24442	}
24443	if pip.Location != nil {
24444		objectMap["location"] = pip.Location
24445	}
24446	if pip.Tags != nil {
24447		objectMap["tags"] = pip.Tags
24448	}
24449	return json.Marshal(objectMap)
24450}
24451
24452// UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
24453func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
24454	var m map[string]*json.RawMessage
24455	err := json.Unmarshal(body, &m)
24456	if err != nil {
24457		return err
24458	}
24459	for k, v := range m {
24460		switch k {
24461		case "sku":
24462			if v != nil {
24463				var sku PublicIPPrefixSku
24464				err = json.Unmarshal(*v, &sku)
24465				if err != nil {
24466					return err
24467				}
24468				pip.Sku = &sku
24469			}
24470		case "properties":
24471			if v != nil {
24472				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
24473				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
24474				if err != nil {
24475					return err
24476				}
24477				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
24478			}
24479		case "etag":
24480			if v != nil {
24481				var etag string
24482				err = json.Unmarshal(*v, &etag)
24483				if err != nil {
24484					return err
24485				}
24486				pip.Etag = &etag
24487			}
24488		case "zones":
24489			if v != nil {
24490				var zones []string
24491				err = json.Unmarshal(*v, &zones)
24492				if err != nil {
24493					return err
24494				}
24495				pip.Zones = &zones
24496			}
24497		case "id":
24498			if v != nil {
24499				var ID string
24500				err = json.Unmarshal(*v, &ID)
24501				if err != nil {
24502					return err
24503				}
24504				pip.ID = &ID
24505			}
24506		case "name":
24507			if v != nil {
24508				var name string
24509				err = json.Unmarshal(*v, &name)
24510				if err != nil {
24511					return err
24512				}
24513				pip.Name = &name
24514			}
24515		case "type":
24516			if v != nil {
24517				var typeVar string
24518				err = json.Unmarshal(*v, &typeVar)
24519				if err != nil {
24520					return err
24521				}
24522				pip.Type = &typeVar
24523			}
24524		case "location":
24525			if v != nil {
24526				var location string
24527				err = json.Unmarshal(*v, &location)
24528				if err != nil {
24529					return err
24530				}
24531				pip.Location = &location
24532			}
24533		case "tags":
24534			if v != nil {
24535				var tags map[string]*string
24536				err = json.Unmarshal(*v, &tags)
24537				if err != nil {
24538					return err
24539				}
24540				pip.Tags = tags
24541			}
24542		}
24543	}
24544
24545	return nil
24546}
24547
24548// PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
24549// long-running operation.
24550type PublicIPPrefixesCreateOrUpdateFuture struct {
24551	azure.Future
24552}
24553
24554// Result returns the result of the asynchronous operation.
24555// If the operation has not completed it will return an error.
24556func (future *PublicIPPrefixesCreateOrUpdateFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
24557	var done bool
24558	done, err = future.DoneWithContext(context.Background(), client)
24559	if err != nil {
24560		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
24561		return
24562	}
24563	if !done {
24564		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
24565		return
24566	}
24567	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24568	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
24569		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
24570		if err != nil {
24571			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
24572		}
24573	}
24574	return
24575}
24576
24577// PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
24578// operation.
24579type PublicIPPrefixesDeleteFuture struct {
24580	azure.Future
24581}
24582
24583// Result returns the result of the asynchronous operation.
24584// If the operation has not completed it will return an error.
24585func (future *PublicIPPrefixesDeleteFuture) Result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
24586	var done bool
24587	done, err = future.DoneWithContext(context.Background(), client)
24588	if err != nil {
24589		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
24590		return
24591	}
24592	if !done {
24593		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
24594		return
24595	}
24596	ar.Response = future.Response()
24597	return
24598}
24599
24600// PublicIPPrefixesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
24601// long-running operation.
24602type PublicIPPrefixesUpdateTagsFuture struct {
24603	azure.Future
24604}
24605
24606// Result returns the result of the asynchronous operation.
24607// If the operation has not completed it will return an error.
24608func (future *PublicIPPrefixesUpdateTagsFuture) Result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
24609	var done bool
24610	done, err = future.DoneWithContext(context.Background(), client)
24611	if err != nil {
24612		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
24613		return
24614	}
24615	if !done {
24616		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesUpdateTagsFuture")
24617		return
24618	}
24619	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24620	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
24621		pip, err = client.UpdateTagsResponder(pip.Response.Response)
24622		if err != nil {
24623			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesUpdateTagsFuture", "Result", pip.Response.Response, "Failure responding to request")
24624		}
24625	}
24626	return
24627}
24628
24629// PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
24630type PublicIPPrefixListResult struct {
24631	autorest.Response `json:"-"`
24632	// Value - A list of public IP prefixes that exists in a resource group.
24633	Value *[]PublicIPPrefix `json:"value,omitempty"`
24634	// NextLink - The URL to get the next set of results.
24635	NextLink *string `json:"nextLink,omitempty"`
24636}
24637
24638// PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
24639type PublicIPPrefixListResultIterator struct {
24640	i    int
24641	page PublicIPPrefixListResultPage
24642}
24643
24644// NextWithContext advances to the next value.  If there was an error making
24645// the request the iterator does not advance and the error is returned.
24646func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
24647	if tracing.IsEnabled() {
24648		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
24649		defer func() {
24650			sc := -1
24651			if iter.Response().Response.Response != nil {
24652				sc = iter.Response().Response.Response.StatusCode
24653			}
24654			tracing.EndSpan(ctx, sc, err)
24655		}()
24656	}
24657	iter.i++
24658	if iter.i < len(iter.page.Values()) {
24659		return nil
24660	}
24661	err = iter.page.NextWithContext(ctx)
24662	if err != nil {
24663		iter.i--
24664		return err
24665	}
24666	iter.i = 0
24667	return nil
24668}
24669
24670// Next advances to the next value.  If there was an error making
24671// the request the iterator does not advance and the error is returned.
24672// Deprecated: Use NextWithContext() instead.
24673func (iter *PublicIPPrefixListResultIterator) Next() error {
24674	return iter.NextWithContext(context.Background())
24675}
24676
24677// NotDone returns true if the enumeration should be started or is not yet complete.
24678func (iter PublicIPPrefixListResultIterator) NotDone() bool {
24679	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24680}
24681
24682// Response returns the raw server response from the last page request.
24683func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
24684	return iter.page.Response()
24685}
24686
24687// Value returns the current value or a zero-initialized value if the
24688// iterator has advanced beyond the end of the collection.
24689func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
24690	if !iter.page.NotDone() {
24691		return PublicIPPrefix{}
24692	}
24693	return iter.page.Values()[iter.i]
24694}
24695
24696// Creates a new instance of the PublicIPPrefixListResultIterator type.
24697func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
24698	return PublicIPPrefixListResultIterator{page: page}
24699}
24700
24701// IsEmpty returns true if the ListResult contains no values.
24702func (piplr PublicIPPrefixListResult) IsEmpty() bool {
24703	return piplr.Value == nil || len(*piplr.Value) == 0
24704}
24705
24706// publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
24707// It returns nil if no more results exist.
24708func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
24709	if piplr.NextLink == nil || len(to.String(piplr.NextLink)) < 1 {
24710		return nil, nil
24711	}
24712	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24713		autorest.AsJSON(),
24714		autorest.AsGet(),
24715		autorest.WithBaseURL(to.String(piplr.NextLink)))
24716}
24717
24718// PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
24719type PublicIPPrefixListResultPage struct {
24720	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
24721	piplr PublicIPPrefixListResult
24722}
24723
24724// NextWithContext advances to the next page of values.  If there was an error making
24725// the request the page does not advance and the error is returned.
24726func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
24727	if tracing.IsEnabled() {
24728		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
24729		defer func() {
24730			sc := -1
24731			if page.Response().Response.Response != nil {
24732				sc = page.Response().Response.Response.StatusCode
24733			}
24734			tracing.EndSpan(ctx, sc, err)
24735		}()
24736	}
24737	next, err := page.fn(ctx, page.piplr)
24738	if err != nil {
24739		return err
24740	}
24741	page.piplr = next
24742	return nil
24743}
24744
24745// Next advances to the next page of values.  If there was an error making
24746// the request the page does not advance and the error is returned.
24747// Deprecated: Use NextWithContext() instead.
24748func (page *PublicIPPrefixListResultPage) Next() error {
24749	return page.NextWithContext(context.Background())
24750}
24751
24752// NotDone returns true if the page enumeration should be started or is not yet complete.
24753func (page PublicIPPrefixListResultPage) NotDone() bool {
24754	return !page.piplr.IsEmpty()
24755}
24756
24757// Response returns the raw server response from the last page request.
24758func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
24759	return page.piplr
24760}
24761
24762// Values returns the slice of values for the current page or nil if there are no values.
24763func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
24764	if page.piplr.IsEmpty() {
24765		return nil
24766	}
24767	return *page.piplr.Value
24768}
24769
24770// Creates a new instance of the PublicIPPrefixListResultPage type.
24771func NewPublicIPPrefixListResultPage(getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
24772	return PublicIPPrefixListResultPage{fn: getNextPage}
24773}
24774
24775// PublicIPPrefixPropertiesFormat public IP prefix properties.
24776type PublicIPPrefixPropertiesFormat struct {
24777	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
24778	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
24779	// IPTags - The list of tags associated with the public IP prefix.
24780	IPTags *[]IPTag `json:"ipTags,omitempty"`
24781	// PrefixLength - The Length of the Public IP Prefix.
24782	PrefixLength *int32 `json:"prefixLength,omitempty"`
24783	// IPPrefix - The allocated Prefix.
24784	IPPrefix *string `json:"ipPrefix,omitempty"`
24785	// PublicIPAddresses - The list of all referenced PublicIPAddresses.
24786	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
24787	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
24788	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
24789	// ResourceGUID - The resource GUID property of the public IP prefix resource.
24790	ResourceGUID *string `json:"resourceGuid,omitempty"`
24791	// ProvisioningState - The provisioning state of the public IP prefix resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24792	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24793}
24794
24795// PublicIPPrefixSku SKU of a public IP prefix.
24796type PublicIPPrefixSku struct {
24797	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
24798	Name PublicIPPrefixSkuName `json:"name,omitempty"`
24799}
24800
24801// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
24802type QueryTroubleshootingParameters struct {
24803	// TargetResourceID - The target resource ID to query the troubleshooting result.
24804	TargetResourceID *string `json:"targetResourceId,omitempty"`
24805}
24806
24807// ReferencedPublicIPAddress reference to a public IP address.
24808type ReferencedPublicIPAddress struct {
24809	// ID - The PublicIPAddress Reference.
24810	ID *string `json:"id,omitempty"`
24811}
24812
24813// Resource common resource representation.
24814type Resource struct {
24815	// ID - Resource ID.
24816	ID *string `json:"id,omitempty"`
24817	// Name - READ-ONLY; Resource name.
24818	Name *string `json:"name,omitempty"`
24819	// Type - READ-ONLY; Resource type.
24820	Type *string `json:"type,omitempty"`
24821	// Location - Resource location.
24822	Location *string `json:"location,omitempty"`
24823	// Tags - Resource tags.
24824	Tags map[string]*string `json:"tags"`
24825}
24826
24827// MarshalJSON is the custom marshaler for Resource.
24828func (r Resource) MarshalJSON() ([]byte, error) {
24829	objectMap := make(map[string]interface{})
24830	if r.ID != nil {
24831		objectMap["id"] = r.ID
24832	}
24833	if r.Location != nil {
24834		objectMap["location"] = r.Location
24835	}
24836	if r.Tags != nil {
24837		objectMap["tags"] = r.Tags
24838	}
24839	return json.Marshal(objectMap)
24840}
24841
24842// ResourceNavigationLink resourceNavigationLink resource.
24843type ResourceNavigationLink struct {
24844	// ResourceNavigationLinkFormat - Resource navigation link properties format.
24845	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
24846	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
24847	Name *string `json:"name,omitempty"`
24848	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
24849	Etag *string `json:"etag,omitempty"`
24850	// Type - READ-ONLY; Resource type.
24851	Type *string `json:"type,omitempty"`
24852	// ID - Resource ID.
24853	ID *string `json:"id,omitempty"`
24854}
24855
24856// MarshalJSON is the custom marshaler for ResourceNavigationLink.
24857func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
24858	objectMap := make(map[string]interface{})
24859	if rnl.ResourceNavigationLinkFormat != nil {
24860		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
24861	}
24862	if rnl.Name != nil {
24863		objectMap["name"] = rnl.Name
24864	}
24865	if rnl.ID != nil {
24866		objectMap["id"] = rnl.ID
24867	}
24868	return json.Marshal(objectMap)
24869}
24870
24871// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
24872func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
24873	var m map[string]*json.RawMessage
24874	err := json.Unmarshal(body, &m)
24875	if err != nil {
24876		return err
24877	}
24878	for k, v := range m {
24879		switch k {
24880		case "properties":
24881			if v != nil {
24882				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
24883				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
24884				if err != nil {
24885					return err
24886				}
24887				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
24888			}
24889		case "name":
24890			if v != nil {
24891				var name string
24892				err = json.Unmarshal(*v, &name)
24893				if err != nil {
24894					return err
24895				}
24896				rnl.Name = &name
24897			}
24898		case "etag":
24899			if v != nil {
24900				var etag string
24901				err = json.Unmarshal(*v, &etag)
24902				if err != nil {
24903					return err
24904				}
24905				rnl.Etag = &etag
24906			}
24907		case "type":
24908			if v != nil {
24909				var typeVar string
24910				err = json.Unmarshal(*v, &typeVar)
24911				if err != nil {
24912					return err
24913				}
24914				rnl.Type = &typeVar
24915			}
24916		case "id":
24917			if v != nil {
24918				var ID string
24919				err = json.Unmarshal(*v, &ID)
24920				if err != nil {
24921					return err
24922				}
24923				rnl.ID = &ID
24924			}
24925		}
24926	}
24927
24928	return nil
24929}
24930
24931// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
24932type ResourceNavigationLinkFormat struct {
24933	// LinkedResourceType - Resource type of the linked resource.
24934	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
24935	// Link - Link to the external resource.
24936	Link *string `json:"link,omitempty"`
24937	// ProvisioningState - READ-ONLY; The provisioning state of the resource navigation link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
24938	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
24939}
24940
24941// ResourceNavigationLinksListResult response for ResourceNavigationLinks_List operation.
24942type ResourceNavigationLinksListResult struct {
24943	autorest.Response `json:"-"`
24944	// Value - The resource navigation links in a subnet.
24945	Value *[]ResourceNavigationLink `json:"value,omitempty"`
24946	// NextLink - READ-ONLY; The URL to get the next set of results.
24947	NextLink *string `json:"nextLink,omitempty"`
24948}
24949
24950// ResourceSet the base resource set for visibility and auto-approval.
24951type ResourceSet struct {
24952	// Subscriptions - The list of subscriptions.
24953	Subscriptions *[]string `json:"subscriptions,omitempty"`
24954}
24955
24956// RetentionPolicyParameters parameters that define the retention policy for flow log.
24957type RetentionPolicyParameters struct {
24958	// Days - Number of days to retain flow log records.
24959	Days *int32 `json:"days,omitempty"`
24960	// Enabled - Flag to enable/disable retention.
24961	Enabled *bool `json:"enabled,omitempty"`
24962}
24963
24964// Route route resource.
24965type Route struct {
24966	autorest.Response `json:"-"`
24967	// RoutePropertiesFormat - Properties of the route.
24968	*RoutePropertiesFormat `json:"properties,omitempty"`
24969	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
24970	Name *string `json:"name,omitempty"`
24971	// Etag - A unique read-only string that changes whenever the resource is updated.
24972	Etag *string `json:"etag,omitempty"`
24973	// ID - Resource ID.
24974	ID *string `json:"id,omitempty"`
24975}
24976
24977// MarshalJSON is the custom marshaler for Route.
24978func (r Route) MarshalJSON() ([]byte, error) {
24979	objectMap := make(map[string]interface{})
24980	if r.RoutePropertiesFormat != nil {
24981		objectMap["properties"] = r.RoutePropertiesFormat
24982	}
24983	if r.Name != nil {
24984		objectMap["name"] = r.Name
24985	}
24986	if r.Etag != nil {
24987		objectMap["etag"] = r.Etag
24988	}
24989	if r.ID != nil {
24990		objectMap["id"] = r.ID
24991	}
24992	return json.Marshal(objectMap)
24993}
24994
24995// UnmarshalJSON is the custom unmarshaler for Route struct.
24996func (r *Route) UnmarshalJSON(body []byte) error {
24997	var m map[string]*json.RawMessage
24998	err := json.Unmarshal(body, &m)
24999	if err != nil {
25000		return err
25001	}
25002	for k, v := range m {
25003		switch k {
25004		case "properties":
25005			if v != nil {
25006				var routePropertiesFormat RoutePropertiesFormat
25007				err = json.Unmarshal(*v, &routePropertiesFormat)
25008				if err != nil {
25009					return err
25010				}
25011				r.RoutePropertiesFormat = &routePropertiesFormat
25012			}
25013		case "name":
25014			if v != nil {
25015				var name string
25016				err = json.Unmarshal(*v, &name)
25017				if err != nil {
25018					return err
25019				}
25020				r.Name = &name
25021			}
25022		case "etag":
25023			if v != nil {
25024				var etag string
25025				err = json.Unmarshal(*v, &etag)
25026				if err != nil {
25027					return err
25028				}
25029				r.Etag = &etag
25030			}
25031		case "id":
25032			if v != nil {
25033				var ID string
25034				err = json.Unmarshal(*v, &ID)
25035				if err != nil {
25036					return err
25037				}
25038				r.ID = &ID
25039			}
25040		}
25041	}
25042
25043	return nil
25044}
25045
25046// RouteFilter route Filter Resource.
25047type RouteFilter struct {
25048	autorest.Response `json:"-"`
25049	// RouteFilterPropertiesFormat - Properties of the route filter.
25050	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
25051	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25052	Etag *string `json:"etag,omitempty"`
25053	// ID - Resource ID.
25054	ID *string `json:"id,omitempty"`
25055	// Name - READ-ONLY; Resource name.
25056	Name *string `json:"name,omitempty"`
25057	// Type - READ-ONLY; Resource type.
25058	Type *string `json:"type,omitempty"`
25059	// Location - Resource location.
25060	Location *string `json:"location,omitempty"`
25061	// Tags - Resource tags.
25062	Tags map[string]*string `json:"tags"`
25063}
25064
25065// MarshalJSON is the custom marshaler for RouteFilter.
25066func (rf RouteFilter) MarshalJSON() ([]byte, error) {
25067	objectMap := make(map[string]interface{})
25068	if rf.RouteFilterPropertiesFormat != nil {
25069		objectMap["properties"] = rf.RouteFilterPropertiesFormat
25070	}
25071	if rf.ID != nil {
25072		objectMap["id"] = rf.ID
25073	}
25074	if rf.Location != nil {
25075		objectMap["location"] = rf.Location
25076	}
25077	if rf.Tags != nil {
25078		objectMap["tags"] = rf.Tags
25079	}
25080	return json.Marshal(objectMap)
25081}
25082
25083// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
25084func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
25085	var m map[string]*json.RawMessage
25086	err := json.Unmarshal(body, &m)
25087	if err != nil {
25088		return err
25089	}
25090	for k, v := range m {
25091		switch k {
25092		case "properties":
25093			if v != nil {
25094				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
25095				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
25096				if err != nil {
25097					return err
25098				}
25099				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
25100			}
25101		case "etag":
25102			if v != nil {
25103				var etag string
25104				err = json.Unmarshal(*v, &etag)
25105				if err != nil {
25106					return err
25107				}
25108				rf.Etag = &etag
25109			}
25110		case "id":
25111			if v != nil {
25112				var ID string
25113				err = json.Unmarshal(*v, &ID)
25114				if err != nil {
25115					return err
25116				}
25117				rf.ID = &ID
25118			}
25119		case "name":
25120			if v != nil {
25121				var name string
25122				err = json.Unmarshal(*v, &name)
25123				if err != nil {
25124					return err
25125				}
25126				rf.Name = &name
25127			}
25128		case "type":
25129			if v != nil {
25130				var typeVar string
25131				err = json.Unmarshal(*v, &typeVar)
25132				if err != nil {
25133					return err
25134				}
25135				rf.Type = &typeVar
25136			}
25137		case "location":
25138			if v != nil {
25139				var location string
25140				err = json.Unmarshal(*v, &location)
25141				if err != nil {
25142					return err
25143				}
25144				rf.Location = &location
25145			}
25146		case "tags":
25147			if v != nil {
25148				var tags map[string]*string
25149				err = json.Unmarshal(*v, &tags)
25150				if err != nil {
25151					return err
25152				}
25153				rf.Tags = tags
25154			}
25155		}
25156	}
25157
25158	return nil
25159}
25160
25161// RouteFilterListResult response for the ListRouteFilters API service call.
25162type RouteFilterListResult struct {
25163	autorest.Response `json:"-"`
25164	// Value - A list of route filters in a resource group.
25165	Value *[]RouteFilter `json:"value,omitempty"`
25166	// NextLink - The URL to get the next set of results.
25167	NextLink *string `json:"nextLink,omitempty"`
25168}
25169
25170// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
25171type RouteFilterListResultIterator struct {
25172	i    int
25173	page RouteFilterListResultPage
25174}
25175
25176// NextWithContext advances to the next value.  If there was an error making
25177// the request the iterator does not advance and the error is returned.
25178func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
25179	if tracing.IsEnabled() {
25180		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
25181		defer func() {
25182			sc := -1
25183			if iter.Response().Response.Response != nil {
25184				sc = iter.Response().Response.Response.StatusCode
25185			}
25186			tracing.EndSpan(ctx, sc, err)
25187		}()
25188	}
25189	iter.i++
25190	if iter.i < len(iter.page.Values()) {
25191		return nil
25192	}
25193	err = iter.page.NextWithContext(ctx)
25194	if err != nil {
25195		iter.i--
25196		return err
25197	}
25198	iter.i = 0
25199	return nil
25200}
25201
25202// Next advances to the next value.  If there was an error making
25203// the request the iterator does not advance and the error is returned.
25204// Deprecated: Use NextWithContext() instead.
25205func (iter *RouteFilterListResultIterator) Next() error {
25206	return iter.NextWithContext(context.Background())
25207}
25208
25209// NotDone returns true if the enumeration should be started or is not yet complete.
25210func (iter RouteFilterListResultIterator) NotDone() bool {
25211	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25212}
25213
25214// Response returns the raw server response from the last page request.
25215func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
25216	return iter.page.Response()
25217}
25218
25219// Value returns the current value or a zero-initialized value if the
25220// iterator has advanced beyond the end of the collection.
25221func (iter RouteFilterListResultIterator) Value() RouteFilter {
25222	if !iter.page.NotDone() {
25223		return RouteFilter{}
25224	}
25225	return iter.page.Values()[iter.i]
25226}
25227
25228// Creates a new instance of the RouteFilterListResultIterator type.
25229func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
25230	return RouteFilterListResultIterator{page: page}
25231}
25232
25233// IsEmpty returns true if the ListResult contains no values.
25234func (rflr RouteFilterListResult) IsEmpty() bool {
25235	return rflr.Value == nil || len(*rflr.Value) == 0
25236}
25237
25238// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
25239// It returns nil if no more results exist.
25240func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
25241	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
25242		return nil, nil
25243	}
25244	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25245		autorest.AsJSON(),
25246		autorest.AsGet(),
25247		autorest.WithBaseURL(to.String(rflr.NextLink)))
25248}
25249
25250// RouteFilterListResultPage contains a page of RouteFilter values.
25251type RouteFilterListResultPage struct {
25252	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
25253	rflr RouteFilterListResult
25254}
25255
25256// NextWithContext advances to the next page of values.  If there was an error making
25257// the request the page does not advance and the error is returned.
25258func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
25259	if tracing.IsEnabled() {
25260		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
25261		defer func() {
25262			sc := -1
25263			if page.Response().Response.Response != nil {
25264				sc = page.Response().Response.Response.StatusCode
25265			}
25266			tracing.EndSpan(ctx, sc, err)
25267		}()
25268	}
25269	next, err := page.fn(ctx, page.rflr)
25270	if err != nil {
25271		return err
25272	}
25273	page.rflr = next
25274	return nil
25275}
25276
25277// Next advances to the next page of values.  If there was an error making
25278// the request the page does not advance and the error is returned.
25279// Deprecated: Use NextWithContext() instead.
25280func (page *RouteFilterListResultPage) Next() error {
25281	return page.NextWithContext(context.Background())
25282}
25283
25284// NotDone returns true if the page enumeration should be started or is not yet complete.
25285func (page RouteFilterListResultPage) NotDone() bool {
25286	return !page.rflr.IsEmpty()
25287}
25288
25289// Response returns the raw server response from the last page request.
25290func (page RouteFilterListResultPage) Response() RouteFilterListResult {
25291	return page.rflr
25292}
25293
25294// Values returns the slice of values for the current page or nil if there are no values.
25295func (page RouteFilterListResultPage) Values() []RouteFilter {
25296	if page.rflr.IsEmpty() {
25297		return nil
25298	}
25299	return *page.rflr.Value
25300}
25301
25302// Creates a new instance of the RouteFilterListResultPage type.
25303func NewRouteFilterListResultPage(getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
25304	return RouteFilterListResultPage{fn: getNextPage}
25305}
25306
25307// RouteFilterPropertiesFormat route Filter Resource.
25308type RouteFilterPropertiesFormat struct {
25309	// Rules - Collection of RouteFilterRules contained within a route filter.
25310	Rules *[]RouteFilterRule `json:"rules,omitempty"`
25311	// Peerings - A collection of references to express route circuit peerings.
25312	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
25313	// Ipv6Peerings - A collection of references to express route circuit ipv6 peerings.
25314	Ipv6Peerings *[]ExpressRouteCircuitPeering `json:"ipv6Peerings,omitempty"`
25315	// ProvisioningState - READ-ONLY; The provisioning state of the route filter resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25316	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25317}
25318
25319// RouteFilterRule route Filter Rule Resource.
25320type RouteFilterRule struct {
25321	autorest.Response `json:"-"`
25322	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
25323	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
25324	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
25325	Name *string `json:"name,omitempty"`
25326	// Location - Resource location.
25327	Location *string `json:"location,omitempty"`
25328	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
25329	Etag *string `json:"etag,omitempty"`
25330	// ID - Resource ID.
25331	ID *string `json:"id,omitempty"`
25332}
25333
25334// MarshalJSON is the custom marshaler for RouteFilterRule.
25335func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
25336	objectMap := make(map[string]interface{})
25337	if rfr.RouteFilterRulePropertiesFormat != nil {
25338		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
25339	}
25340	if rfr.Name != nil {
25341		objectMap["name"] = rfr.Name
25342	}
25343	if rfr.Location != nil {
25344		objectMap["location"] = rfr.Location
25345	}
25346	if rfr.ID != nil {
25347		objectMap["id"] = rfr.ID
25348	}
25349	return json.Marshal(objectMap)
25350}
25351
25352// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
25353func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
25354	var m map[string]*json.RawMessage
25355	err := json.Unmarshal(body, &m)
25356	if err != nil {
25357		return err
25358	}
25359	for k, v := range m {
25360		switch k {
25361		case "properties":
25362			if v != nil {
25363				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
25364				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
25365				if err != nil {
25366					return err
25367				}
25368				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
25369			}
25370		case "name":
25371			if v != nil {
25372				var name string
25373				err = json.Unmarshal(*v, &name)
25374				if err != nil {
25375					return err
25376				}
25377				rfr.Name = &name
25378			}
25379		case "location":
25380			if v != nil {
25381				var location string
25382				err = json.Unmarshal(*v, &location)
25383				if err != nil {
25384					return err
25385				}
25386				rfr.Location = &location
25387			}
25388		case "etag":
25389			if v != nil {
25390				var etag string
25391				err = json.Unmarshal(*v, &etag)
25392				if err != nil {
25393					return err
25394				}
25395				rfr.Etag = &etag
25396			}
25397		case "id":
25398			if v != nil {
25399				var ID string
25400				err = json.Unmarshal(*v, &ID)
25401				if err != nil {
25402					return err
25403				}
25404				rfr.ID = &ID
25405			}
25406		}
25407	}
25408
25409	return nil
25410}
25411
25412// RouteFilterRuleListResult response for the ListRouteFilterRules API service call.
25413type RouteFilterRuleListResult struct {
25414	autorest.Response `json:"-"`
25415	// Value - A list of RouteFilterRules in a resource group.
25416	Value *[]RouteFilterRule `json:"value,omitempty"`
25417	// NextLink - The URL to get the next set of results.
25418	NextLink *string `json:"nextLink,omitempty"`
25419}
25420
25421// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
25422type RouteFilterRuleListResultIterator struct {
25423	i    int
25424	page RouteFilterRuleListResultPage
25425}
25426
25427// NextWithContext advances to the next value.  If there was an error making
25428// the request the iterator does not advance and the error is returned.
25429func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
25430	if tracing.IsEnabled() {
25431		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
25432		defer func() {
25433			sc := -1
25434			if iter.Response().Response.Response != nil {
25435				sc = iter.Response().Response.Response.StatusCode
25436			}
25437			tracing.EndSpan(ctx, sc, err)
25438		}()
25439	}
25440	iter.i++
25441	if iter.i < len(iter.page.Values()) {
25442		return nil
25443	}
25444	err = iter.page.NextWithContext(ctx)
25445	if err != nil {
25446		iter.i--
25447		return err
25448	}
25449	iter.i = 0
25450	return nil
25451}
25452
25453// Next advances to the next value.  If there was an error making
25454// the request the iterator does not advance and the error is returned.
25455// Deprecated: Use NextWithContext() instead.
25456func (iter *RouteFilterRuleListResultIterator) Next() error {
25457	return iter.NextWithContext(context.Background())
25458}
25459
25460// NotDone returns true if the enumeration should be started or is not yet complete.
25461func (iter RouteFilterRuleListResultIterator) NotDone() bool {
25462	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25463}
25464
25465// Response returns the raw server response from the last page request.
25466func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
25467	return iter.page.Response()
25468}
25469
25470// Value returns the current value or a zero-initialized value if the
25471// iterator has advanced beyond the end of the collection.
25472func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
25473	if !iter.page.NotDone() {
25474		return RouteFilterRule{}
25475	}
25476	return iter.page.Values()[iter.i]
25477}
25478
25479// Creates a new instance of the RouteFilterRuleListResultIterator type.
25480func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
25481	return RouteFilterRuleListResultIterator{page: page}
25482}
25483
25484// IsEmpty returns true if the ListResult contains no values.
25485func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
25486	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
25487}
25488
25489// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
25490// It returns nil if no more results exist.
25491func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
25492	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
25493		return nil, nil
25494	}
25495	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25496		autorest.AsJSON(),
25497		autorest.AsGet(),
25498		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
25499}
25500
25501// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
25502type RouteFilterRuleListResultPage struct {
25503	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
25504	rfrlr RouteFilterRuleListResult
25505}
25506
25507// NextWithContext advances to the next page of values.  If there was an error making
25508// the request the page does not advance and the error is returned.
25509func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
25510	if tracing.IsEnabled() {
25511		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
25512		defer func() {
25513			sc := -1
25514			if page.Response().Response.Response != nil {
25515				sc = page.Response().Response.Response.StatusCode
25516			}
25517			tracing.EndSpan(ctx, sc, err)
25518		}()
25519	}
25520	next, err := page.fn(ctx, page.rfrlr)
25521	if err != nil {
25522		return err
25523	}
25524	page.rfrlr = next
25525	return nil
25526}
25527
25528// Next advances to the next page of values.  If there was an error making
25529// the request the page does not advance and the error is returned.
25530// Deprecated: Use NextWithContext() instead.
25531func (page *RouteFilterRuleListResultPage) Next() error {
25532	return page.NextWithContext(context.Background())
25533}
25534
25535// NotDone returns true if the page enumeration should be started or is not yet complete.
25536func (page RouteFilterRuleListResultPage) NotDone() bool {
25537	return !page.rfrlr.IsEmpty()
25538}
25539
25540// Response returns the raw server response from the last page request.
25541func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
25542	return page.rfrlr
25543}
25544
25545// Values returns the slice of values for the current page or nil if there are no values.
25546func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
25547	if page.rfrlr.IsEmpty() {
25548		return nil
25549	}
25550	return *page.rfrlr.Value
25551}
25552
25553// Creates a new instance of the RouteFilterRuleListResultPage type.
25554func NewRouteFilterRuleListResultPage(getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
25555	return RouteFilterRuleListResultPage{fn: getNextPage}
25556}
25557
25558// RouteFilterRulePropertiesFormat route Filter Rule Resource.
25559type RouteFilterRulePropertiesFormat struct {
25560	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
25561	Access Access `json:"access,omitempty"`
25562	// RouteFilterRuleType - The rule type of the rule.
25563	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
25564	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
25565	Communities *[]string `json:"communities,omitempty"`
25566	// ProvisioningState - READ-ONLY; The provisioning state of the route filter rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25567	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25568}
25569
25570// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25571// long-running operation.
25572type RouteFilterRulesCreateOrUpdateFuture struct {
25573	azure.Future
25574}
25575
25576// Result returns the result of the asynchronous operation.
25577// If the operation has not completed it will return an error.
25578func (future *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
25579	var done bool
25580	done, err = future.DoneWithContext(context.Background(), client)
25581	if err != nil {
25582		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25583		return
25584	}
25585	if !done {
25586		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
25587		return
25588	}
25589	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25590	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
25591		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
25592		if err != nil {
25593			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
25594		}
25595	}
25596	return
25597}
25598
25599// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25600// operation.
25601type RouteFilterRulesDeleteFuture struct {
25602	azure.Future
25603}
25604
25605// Result returns the result of the asynchronous operation.
25606// If the operation has not completed it will return an error.
25607func (future *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
25608	var done bool
25609	done, err = future.DoneWithContext(context.Background(), client)
25610	if err != nil {
25611		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
25612		return
25613	}
25614	if !done {
25615		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
25616		return
25617	}
25618	ar.Response = future.Response()
25619	return
25620}
25621
25622// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
25623// operation.
25624type RouteFilterRulesUpdateFuture struct {
25625	azure.Future
25626}
25627
25628// Result returns the result of the asynchronous operation.
25629// If the operation has not completed it will return an error.
25630func (future *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
25631	var done bool
25632	done, err = future.DoneWithContext(context.Background(), client)
25633	if err != nil {
25634		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
25635		return
25636	}
25637	if !done {
25638		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
25639		return
25640	}
25641	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25642	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
25643		rfr, err = client.UpdateResponder(rfr.Response.Response)
25644		if err != nil {
25645			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
25646		}
25647	}
25648	return
25649}
25650
25651// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
25652// long-running operation.
25653type RouteFiltersCreateOrUpdateFuture struct {
25654	azure.Future
25655}
25656
25657// Result returns the result of the asynchronous operation.
25658// If the operation has not completed it will return an error.
25659func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
25660	var done bool
25661	done, err = future.DoneWithContext(context.Background(), client)
25662	if err != nil {
25663		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25664		return
25665	}
25666	if !done {
25667		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
25668		return
25669	}
25670	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25671	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
25672		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
25673		if err != nil {
25674			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
25675		}
25676	}
25677	return
25678}
25679
25680// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
25681// operation.
25682type RouteFiltersDeleteFuture struct {
25683	azure.Future
25684}
25685
25686// Result returns the result of the asynchronous operation.
25687// If the operation has not completed it will return an error.
25688func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
25689	var done bool
25690	done, err = future.DoneWithContext(context.Background(), client)
25691	if err != nil {
25692		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
25693		return
25694	}
25695	if !done {
25696		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
25697		return
25698	}
25699	ar.Response = future.Response()
25700	return
25701}
25702
25703// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
25704// operation.
25705type RouteFiltersUpdateFuture struct {
25706	azure.Future
25707}
25708
25709// Result returns the result of the asynchronous operation.
25710// If the operation has not completed it will return an error.
25711func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
25712	var done bool
25713	done, err = future.DoneWithContext(context.Background(), client)
25714	if err != nil {
25715		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
25716		return
25717	}
25718	if !done {
25719		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
25720		return
25721	}
25722	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25723	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
25724		rf, err = client.UpdateResponder(rf.Response.Response)
25725		if err != nil {
25726			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
25727		}
25728	}
25729	return
25730}
25731
25732// RouteListResult response for the ListRoute API service call.
25733type RouteListResult struct {
25734	autorest.Response `json:"-"`
25735	// Value - A list of routes in a resource group.
25736	Value *[]Route `json:"value,omitempty"`
25737	// NextLink - The URL to get the next set of results.
25738	NextLink *string `json:"nextLink,omitempty"`
25739}
25740
25741// RouteListResultIterator provides access to a complete listing of Route values.
25742type RouteListResultIterator struct {
25743	i    int
25744	page RouteListResultPage
25745}
25746
25747// NextWithContext advances to the next value.  If there was an error making
25748// the request the iterator does not advance and the error is returned.
25749func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
25750	if tracing.IsEnabled() {
25751		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
25752		defer func() {
25753			sc := -1
25754			if iter.Response().Response.Response != nil {
25755				sc = iter.Response().Response.Response.StatusCode
25756			}
25757			tracing.EndSpan(ctx, sc, err)
25758		}()
25759	}
25760	iter.i++
25761	if iter.i < len(iter.page.Values()) {
25762		return nil
25763	}
25764	err = iter.page.NextWithContext(ctx)
25765	if err != nil {
25766		iter.i--
25767		return err
25768	}
25769	iter.i = 0
25770	return nil
25771}
25772
25773// Next advances to the next value.  If there was an error making
25774// the request the iterator does not advance and the error is returned.
25775// Deprecated: Use NextWithContext() instead.
25776func (iter *RouteListResultIterator) Next() error {
25777	return iter.NextWithContext(context.Background())
25778}
25779
25780// NotDone returns true if the enumeration should be started or is not yet complete.
25781func (iter RouteListResultIterator) NotDone() bool {
25782	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25783}
25784
25785// Response returns the raw server response from the last page request.
25786func (iter RouteListResultIterator) Response() RouteListResult {
25787	return iter.page.Response()
25788}
25789
25790// Value returns the current value or a zero-initialized value if the
25791// iterator has advanced beyond the end of the collection.
25792func (iter RouteListResultIterator) Value() Route {
25793	if !iter.page.NotDone() {
25794		return Route{}
25795	}
25796	return iter.page.Values()[iter.i]
25797}
25798
25799// Creates a new instance of the RouteListResultIterator type.
25800func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
25801	return RouteListResultIterator{page: page}
25802}
25803
25804// IsEmpty returns true if the ListResult contains no values.
25805func (rlr RouteListResult) IsEmpty() bool {
25806	return rlr.Value == nil || len(*rlr.Value) == 0
25807}
25808
25809// routeListResultPreparer prepares a request to retrieve the next set of results.
25810// It returns nil if no more results exist.
25811func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
25812	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
25813		return nil, nil
25814	}
25815	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25816		autorest.AsJSON(),
25817		autorest.AsGet(),
25818		autorest.WithBaseURL(to.String(rlr.NextLink)))
25819}
25820
25821// RouteListResultPage contains a page of Route values.
25822type RouteListResultPage struct {
25823	fn  func(context.Context, RouteListResult) (RouteListResult, error)
25824	rlr RouteListResult
25825}
25826
25827// NextWithContext advances to the next page of values.  If there was an error making
25828// the request the page does not advance and the error is returned.
25829func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
25830	if tracing.IsEnabled() {
25831		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
25832		defer func() {
25833			sc := -1
25834			if page.Response().Response.Response != nil {
25835				sc = page.Response().Response.Response.StatusCode
25836			}
25837			tracing.EndSpan(ctx, sc, err)
25838		}()
25839	}
25840	next, err := page.fn(ctx, page.rlr)
25841	if err != nil {
25842		return err
25843	}
25844	page.rlr = next
25845	return nil
25846}
25847
25848// Next advances to the next page of values.  If there was an error making
25849// the request the page does not advance and the error is returned.
25850// Deprecated: Use NextWithContext() instead.
25851func (page *RouteListResultPage) Next() error {
25852	return page.NextWithContext(context.Background())
25853}
25854
25855// NotDone returns true if the page enumeration should be started or is not yet complete.
25856func (page RouteListResultPage) NotDone() bool {
25857	return !page.rlr.IsEmpty()
25858}
25859
25860// Response returns the raw server response from the last page request.
25861func (page RouteListResultPage) Response() RouteListResult {
25862	return page.rlr
25863}
25864
25865// Values returns the slice of values for the current page or nil if there are no values.
25866func (page RouteListResultPage) Values() []Route {
25867	if page.rlr.IsEmpty() {
25868		return nil
25869	}
25870	return *page.rlr.Value
25871}
25872
25873// Creates a new instance of the RouteListResultPage type.
25874func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
25875	return RouteListResultPage{fn: getNextPage}
25876}
25877
25878// RoutePropertiesFormat route resource.
25879type RoutePropertiesFormat struct {
25880	// AddressPrefix - The destination CIDR to which the route applies.
25881	AddressPrefix *string `json:"addressPrefix,omitempty"`
25882	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
25883	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
25884	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
25885	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
25886	// ProvisioningState - The provisioning state of the route resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
25887	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
25888}
25889
25890// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
25891// operation.
25892type RoutesCreateOrUpdateFuture struct {
25893	azure.Future
25894}
25895
25896// Result returns the result of the asynchronous operation.
25897// If the operation has not completed it will return an error.
25898func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
25899	var done bool
25900	done, err = future.DoneWithContext(context.Background(), client)
25901	if err != nil {
25902		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
25903		return
25904	}
25905	if !done {
25906		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
25907		return
25908	}
25909	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
25910	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
25911		r, err = client.CreateOrUpdateResponder(r.Response.Response)
25912		if err != nil {
25913			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
25914		}
25915	}
25916	return
25917}
25918
25919// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
25920type RoutesDeleteFuture struct {
25921	azure.Future
25922}
25923
25924// Result returns the result of the asynchronous operation.
25925// If the operation has not completed it will return an error.
25926func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
25927	var done bool
25928	done, err = future.DoneWithContext(context.Background(), client)
25929	if err != nil {
25930		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
25931		return
25932	}
25933	if !done {
25934		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
25935		return
25936	}
25937	ar.Response = future.Response()
25938	return
25939}
25940
25941// RouteTable route table resource.
25942type RouteTable struct {
25943	autorest.Response `json:"-"`
25944	// RouteTablePropertiesFormat - Properties of the route table.
25945	*RouteTablePropertiesFormat `json:"properties,omitempty"`
25946	// Etag - A unique read-only string that changes whenever the resource is updated.
25947	Etag *string `json:"etag,omitempty"`
25948	// ID - Resource ID.
25949	ID *string `json:"id,omitempty"`
25950	// Name - READ-ONLY; Resource name.
25951	Name *string `json:"name,omitempty"`
25952	// Type - READ-ONLY; Resource type.
25953	Type *string `json:"type,omitempty"`
25954	// Location - Resource location.
25955	Location *string `json:"location,omitempty"`
25956	// Tags - Resource tags.
25957	Tags map[string]*string `json:"tags"`
25958}
25959
25960// MarshalJSON is the custom marshaler for RouteTable.
25961func (rt RouteTable) MarshalJSON() ([]byte, error) {
25962	objectMap := make(map[string]interface{})
25963	if rt.RouteTablePropertiesFormat != nil {
25964		objectMap["properties"] = rt.RouteTablePropertiesFormat
25965	}
25966	if rt.Etag != nil {
25967		objectMap["etag"] = rt.Etag
25968	}
25969	if rt.ID != nil {
25970		objectMap["id"] = rt.ID
25971	}
25972	if rt.Location != nil {
25973		objectMap["location"] = rt.Location
25974	}
25975	if rt.Tags != nil {
25976		objectMap["tags"] = rt.Tags
25977	}
25978	return json.Marshal(objectMap)
25979}
25980
25981// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
25982func (rt *RouteTable) UnmarshalJSON(body []byte) error {
25983	var m map[string]*json.RawMessage
25984	err := json.Unmarshal(body, &m)
25985	if err != nil {
25986		return err
25987	}
25988	for k, v := range m {
25989		switch k {
25990		case "properties":
25991			if v != nil {
25992				var routeTablePropertiesFormat RouteTablePropertiesFormat
25993				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
25994				if err != nil {
25995					return err
25996				}
25997				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
25998			}
25999		case "etag":
26000			if v != nil {
26001				var etag string
26002				err = json.Unmarshal(*v, &etag)
26003				if err != nil {
26004					return err
26005				}
26006				rt.Etag = &etag
26007			}
26008		case "id":
26009			if v != nil {
26010				var ID string
26011				err = json.Unmarshal(*v, &ID)
26012				if err != nil {
26013					return err
26014				}
26015				rt.ID = &ID
26016			}
26017		case "name":
26018			if v != nil {
26019				var name string
26020				err = json.Unmarshal(*v, &name)
26021				if err != nil {
26022					return err
26023				}
26024				rt.Name = &name
26025			}
26026		case "type":
26027			if v != nil {
26028				var typeVar string
26029				err = json.Unmarshal(*v, &typeVar)
26030				if err != nil {
26031					return err
26032				}
26033				rt.Type = &typeVar
26034			}
26035		case "location":
26036			if v != nil {
26037				var location string
26038				err = json.Unmarshal(*v, &location)
26039				if err != nil {
26040					return err
26041				}
26042				rt.Location = &location
26043			}
26044		case "tags":
26045			if v != nil {
26046				var tags map[string]*string
26047				err = json.Unmarshal(*v, &tags)
26048				if err != nil {
26049					return err
26050				}
26051				rt.Tags = tags
26052			}
26053		}
26054	}
26055
26056	return nil
26057}
26058
26059// RouteTableListResult response for the ListRouteTable API service call.
26060type RouteTableListResult struct {
26061	autorest.Response `json:"-"`
26062	// Value - A list of route tables in a resource group.
26063	Value *[]RouteTable `json:"value,omitempty"`
26064	// NextLink - The URL to get the next set of results.
26065	NextLink *string `json:"nextLink,omitempty"`
26066}
26067
26068// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
26069type RouteTableListResultIterator struct {
26070	i    int
26071	page RouteTableListResultPage
26072}
26073
26074// NextWithContext advances to the next value.  If there was an error making
26075// the request the iterator does not advance and the error is returned.
26076func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
26077	if tracing.IsEnabled() {
26078		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
26079		defer func() {
26080			sc := -1
26081			if iter.Response().Response.Response != nil {
26082				sc = iter.Response().Response.Response.StatusCode
26083			}
26084			tracing.EndSpan(ctx, sc, err)
26085		}()
26086	}
26087	iter.i++
26088	if iter.i < len(iter.page.Values()) {
26089		return nil
26090	}
26091	err = iter.page.NextWithContext(ctx)
26092	if err != nil {
26093		iter.i--
26094		return err
26095	}
26096	iter.i = 0
26097	return nil
26098}
26099
26100// Next advances to the next value.  If there was an error making
26101// the request the iterator does not advance and the error is returned.
26102// Deprecated: Use NextWithContext() instead.
26103func (iter *RouteTableListResultIterator) Next() error {
26104	return iter.NextWithContext(context.Background())
26105}
26106
26107// NotDone returns true if the enumeration should be started or is not yet complete.
26108func (iter RouteTableListResultIterator) NotDone() bool {
26109	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26110}
26111
26112// Response returns the raw server response from the last page request.
26113func (iter RouteTableListResultIterator) Response() RouteTableListResult {
26114	return iter.page.Response()
26115}
26116
26117// Value returns the current value or a zero-initialized value if the
26118// iterator has advanced beyond the end of the collection.
26119func (iter RouteTableListResultIterator) Value() RouteTable {
26120	if !iter.page.NotDone() {
26121		return RouteTable{}
26122	}
26123	return iter.page.Values()[iter.i]
26124}
26125
26126// Creates a new instance of the RouteTableListResultIterator type.
26127func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
26128	return RouteTableListResultIterator{page: page}
26129}
26130
26131// IsEmpty returns true if the ListResult contains no values.
26132func (rtlr RouteTableListResult) IsEmpty() bool {
26133	return rtlr.Value == nil || len(*rtlr.Value) == 0
26134}
26135
26136// routeTableListResultPreparer prepares a request to retrieve the next set of results.
26137// It returns nil if no more results exist.
26138func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
26139	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
26140		return nil, nil
26141	}
26142	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26143		autorest.AsJSON(),
26144		autorest.AsGet(),
26145		autorest.WithBaseURL(to.String(rtlr.NextLink)))
26146}
26147
26148// RouteTableListResultPage contains a page of RouteTable values.
26149type RouteTableListResultPage struct {
26150	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
26151	rtlr RouteTableListResult
26152}
26153
26154// NextWithContext advances to the next page of values.  If there was an error making
26155// the request the page does not advance and the error is returned.
26156func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
26157	if tracing.IsEnabled() {
26158		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
26159		defer func() {
26160			sc := -1
26161			if page.Response().Response.Response != nil {
26162				sc = page.Response().Response.Response.StatusCode
26163			}
26164			tracing.EndSpan(ctx, sc, err)
26165		}()
26166	}
26167	next, err := page.fn(ctx, page.rtlr)
26168	if err != nil {
26169		return err
26170	}
26171	page.rtlr = next
26172	return nil
26173}
26174
26175// Next advances to the next page of values.  If there was an error making
26176// the request the page does not advance and the error is returned.
26177// Deprecated: Use NextWithContext() instead.
26178func (page *RouteTableListResultPage) Next() error {
26179	return page.NextWithContext(context.Background())
26180}
26181
26182// NotDone returns true if the page enumeration should be started or is not yet complete.
26183func (page RouteTableListResultPage) NotDone() bool {
26184	return !page.rtlr.IsEmpty()
26185}
26186
26187// Response returns the raw server response from the last page request.
26188func (page RouteTableListResultPage) Response() RouteTableListResult {
26189	return page.rtlr
26190}
26191
26192// Values returns the slice of values for the current page or nil if there are no values.
26193func (page RouteTableListResultPage) Values() []RouteTable {
26194	if page.rtlr.IsEmpty() {
26195		return nil
26196	}
26197	return *page.rtlr.Value
26198}
26199
26200// Creates a new instance of the RouteTableListResultPage type.
26201func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
26202	return RouteTableListResultPage{fn: getNextPage}
26203}
26204
26205// RouteTablePropertiesFormat route Table resource.
26206type RouteTablePropertiesFormat struct {
26207	// Routes - Collection of routes contained within a route table.
26208	Routes *[]Route `json:"routes,omitempty"`
26209	// Subnets - READ-ONLY; A collection of references to subnets.
26210	Subnets *[]Subnet `json:"subnets,omitempty"`
26211	// DisableBgpRoutePropagation - Whether to disable the routes learned by BGP on that route table. True means disable.
26212	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
26213	// ProvisioningState - The provisioning state of the route table resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26214	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26215}
26216
26217// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26218// long-running operation.
26219type RouteTablesCreateOrUpdateFuture struct {
26220	azure.Future
26221}
26222
26223// Result returns the result of the asynchronous operation.
26224// If the operation has not completed it will return an error.
26225func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
26226	var done bool
26227	done, err = future.DoneWithContext(context.Background(), client)
26228	if err != nil {
26229		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26230		return
26231	}
26232	if !done {
26233		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
26234		return
26235	}
26236	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26237	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
26238		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
26239		if err != nil {
26240			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
26241		}
26242	}
26243	return
26244}
26245
26246// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26247// operation.
26248type RouteTablesDeleteFuture struct {
26249	azure.Future
26250}
26251
26252// Result returns the result of the asynchronous operation.
26253// If the operation has not completed it will return an error.
26254func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
26255	var done bool
26256	done, err = future.DoneWithContext(context.Background(), client)
26257	if err != nil {
26258		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
26259		return
26260	}
26261	if !done {
26262		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
26263		return
26264	}
26265	ar.Response = future.Response()
26266	return
26267}
26268
26269// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
26270// operation.
26271type RouteTablesUpdateTagsFuture struct {
26272	azure.Future
26273}
26274
26275// Result returns the result of the asynchronous operation.
26276// If the operation has not completed it will return an error.
26277func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
26278	var done bool
26279	done, err = future.DoneWithContext(context.Background(), client)
26280	if err != nil {
26281		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26282		return
26283	}
26284	if !done {
26285		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
26286		return
26287	}
26288	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26289	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
26290		rt, err = client.UpdateTagsResponder(rt.Response.Response)
26291		if err != nil {
26292			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
26293		}
26294	}
26295	return
26296}
26297
26298// RuleCondition rule condition of type network.
26299type RuleCondition struct {
26300	// IPProtocols - Array of FirewallPolicyRuleConditionNetworkProtocols.
26301	IPProtocols *[]FirewallPolicyRuleConditionNetworkProtocol `json:"ipProtocols,omitempty"`
26302	// SourceAddresses - List of source IP addresses for this rule.
26303	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
26304	// DestinationAddresses - List of destination IP addresses or Service Tags.
26305	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
26306	// DestinationPorts - List of destination ports.
26307	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
26308	// Name - Name of the rule condition.
26309	Name *string `json:"name,omitempty"`
26310	// Description - Description of the rule condition.
26311	Description *string `json:"description,omitempty"`
26312	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
26313	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
26314}
26315
26316// MarshalJSON is the custom marshaler for RuleCondition.
26317func (rc RuleCondition) MarshalJSON() ([]byte, error) {
26318	rc.RuleConditionType = RuleConditionTypeNetworkRuleCondition
26319	objectMap := make(map[string]interface{})
26320	if rc.IPProtocols != nil {
26321		objectMap["ipProtocols"] = rc.IPProtocols
26322	}
26323	if rc.SourceAddresses != nil {
26324		objectMap["sourceAddresses"] = rc.SourceAddresses
26325	}
26326	if rc.DestinationAddresses != nil {
26327		objectMap["destinationAddresses"] = rc.DestinationAddresses
26328	}
26329	if rc.DestinationPorts != nil {
26330		objectMap["destinationPorts"] = rc.DestinationPorts
26331	}
26332	if rc.Name != nil {
26333		objectMap["name"] = rc.Name
26334	}
26335	if rc.Description != nil {
26336		objectMap["description"] = rc.Description
26337	}
26338	if rc.RuleConditionType != "" {
26339		objectMap["ruleConditionType"] = rc.RuleConditionType
26340	}
26341	return json.Marshal(objectMap)
26342}
26343
26344// AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26345func (rc RuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
26346	return nil, false
26347}
26348
26349// AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26350func (rc RuleCondition) AsRuleCondition() (*RuleCondition, bool) {
26351	return &rc, true
26352}
26353
26354// AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26355func (rc RuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
26356	return nil, false
26357}
26358
26359// AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
26360func (rc RuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
26361	return &rc, true
26362}
26363
26364// SecurityGroup networkSecurityGroup resource.
26365type SecurityGroup struct {
26366	autorest.Response `json:"-"`
26367	// SecurityGroupPropertiesFormat - Properties of the network security group.
26368	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
26369	// Etag - A unique read-only string that changes whenever the resource is updated.
26370	Etag *string `json:"etag,omitempty"`
26371	// ID - Resource ID.
26372	ID *string `json:"id,omitempty"`
26373	// Name - READ-ONLY; Resource name.
26374	Name *string `json:"name,omitempty"`
26375	// Type - READ-ONLY; Resource type.
26376	Type *string `json:"type,omitempty"`
26377	// Location - Resource location.
26378	Location *string `json:"location,omitempty"`
26379	// Tags - Resource tags.
26380	Tags map[string]*string `json:"tags"`
26381}
26382
26383// MarshalJSON is the custom marshaler for SecurityGroup.
26384func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
26385	objectMap := make(map[string]interface{})
26386	if sg.SecurityGroupPropertiesFormat != nil {
26387		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
26388	}
26389	if sg.Etag != nil {
26390		objectMap["etag"] = sg.Etag
26391	}
26392	if sg.ID != nil {
26393		objectMap["id"] = sg.ID
26394	}
26395	if sg.Location != nil {
26396		objectMap["location"] = sg.Location
26397	}
26398	if sg.Tags != nil {
26399		objectMap["tags"] = sg.Tags
26400	}
26401	return json.Marshal(objectMap)
26402}
26403
26404// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
26405func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
26406	var m map[string]*json.RawMessage
26407	err := json.Unmarshal(body, &m)
26408	if err != nil {
26409		return err
26410	}
26411	for k, v := range m {
26412		switch k {
26413		case "properties":
26414			if v != nil {
26415				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
26416				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
26417				if err != nil {
26418					return err
26419				}
26420				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
26421			}
26422		case "etag":
26423			if v != nil {
26424				var etag string
26425				err = json.Unmarshal(*v, &etag)
26426				if err != nil {
26427					return err
26428				}
26429				sg.Etag = &etag
26430			}
26431		case "id":
26432			if v != nil {
26433				var ID string
26434				err = json.Unmarshal(*v, &ID)
26435				if err != nil {
26436					return err
26437				}
26438				sg.ID = &ID
26439			}
26440		case "name":
26441			if v != nil {
26442				var name string
26443				err = json.Unmarshal(*v, &name)
26444				if err != nil {
26445					return err
26446				}
26447				sg.Name = &name
26448			}
26449		case "type":
26450			if v != nil {
26451				var typeVar string
26452				err = json.Unmarshal(*v, &typeVar)
26453				if err != nil {
26454					return err
26455				}
26456				sg.Type = &typeVar
26457			}
26458		case "location":
26459			if v != nil {
26460				var location string
26461				err = json.Unmarshal(*v, &location)
26462				if err != nil {
26463					return err
26464				}
26465				sg.Location = &location
26466			}
26467		case "tags":
26468			if v != nil {
26469				var tags map[string]*string
26470				err = json.Unmarshal(*v, &tags)
26471				if err != nil {
26472					return err
26473				}
26474				sg.Tags = tags
26475			}
26476		}
26477	}
26478
26479	return nil
26480}
26481
26482// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
26483type SecurityGroupListResult struct {
26484	autorest.Response `json:"-"`
26485	// Value - A list of NetworkSecurityGroup resources.
26486	Value *[]SecurityGroup `json:"value,omitempty"`
26487	// NextLink - The URL to get the next set of results.
26488	NextLink *string `json:"nextLink,omitempty"`
26489}
26490
26491// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
26492type SecurityGroupListResultIterator struct {
26493	i    int
26494	page SecurityGroupListResultPage
26495}
26496
26497// NextWithContext advances to the next value.  If there was an error making
26498// the request the iterator does not advance and the error is returned.
26499func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
26500	if tracing.IsEnabled() {
26501		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
26502		defer func() {
26503			sc := -1
26504			if iter.Response().Response.Response != nil {
26505				sc = iter.Response().Response.Response.StatusCode
26506			}
26507			tracing.EndSpan(ctx, sc, err)
26508		}()
26509	}
26510	iter.i++
26511	if iter.i < len(iter.page.Values()) {
26512		return nil
26513	}
26514	err = iter.page.NextWithContext(ctx)
26515	if err != nil {
26516		iter.i--
26517		return err
26518	}
26519	iter.i = 0
26520	return nil
26521}
26522
26523// Next advances to the next value.  If there was an error making
26524// the request the iterator does not advance and the error is returned.
26525// Deprecated: Use NextWithContext() instead.
26526func (iter *SecurityGroupListResultIterator) Next() error {
26527	return iter.NextWithContext(context.Background())
26528}
26529
26530// NotDone returns true if the enumeration should be started or is not yet complete.
26531func (iter SecurityGroupListResultIterator) NotDone() bool {
26532	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26533}
26534
26535// Response returns the raw server response from the last page request.
26536func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
26537	return iter.page.Response()
26538}
26539
26540// Value returns the current value or a zero-initialized value if the
26541// iterator has advanced beyond the end of the collection.
26542func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
26543	if !iter.page.NotDone() {
26544		return SecurityGroup{}
26545	}
26546	return iter.page.Values()[iter.i]
26547}
26548
26549// Creates a new instance of the SecurityGroupListResultIterator type.
26550func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
26551	return SecurityGroupListResultIterator{page: page}
26552}
26553
26554// IsEmpty returns true if the ListResult contains no values.
26555func (sglr SecurityGroupListResult) IsEmpty() bool {
26556	return sglr.Value == nil || len(*sglr.Value) == 0
26557}
26558
26559// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
26560// It returns nil if no more results exist.
26561func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
26562	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
26563		return nil, nil
26564	}
26565	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26566		autorest.AsJSON(),
26567		autorest.AsGet(),
26568		autorest.WithBaseURL(to.String(sglr.NextLink)))
26569}
26570
26571// SecurityGroupListResultPage contains a page of SecurityGroup values.
26572type SecurityGroupListResultPage struct {
26573	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
26574	sglr SecurityGroupListResult
26575}
26576
26577// NextWithContext advances to the next page of values.  If there was an error making
26578// the request the page does not advance and the error is returned.
26579func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
26580	if tracing.IsEnabled() {
26581		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
26582		defer func() {
26583			sc := -1
26584			if page.Response().Response.Response != nil {
26585				sc = page.Response().Response.Response.StatusCode
26586			}
26587			tracing.EndSpan(ctx, sc, err)
26588		}()
26589	}
26590	next, err := page.fn(ctx, page.sglr)
26591	if err != nil {
26592		return err
26593	}
26594	page.sglr = next
26595	return nil
26596}
26597
26598// Next advances to the next page of values.  If there was an error making
26599// the request the page does not advance and the error is returned.
26600// Deprecated: Use NextWithContext() instead.
26601func (page *SecurityGroupListResultPage) Next() error {
26602	return page.NextWithContext(context.Background())
26603}
26604
26605// NotDone returns true if the page enumeration should be started or is not yet complete.
26606func (page SecurityGroupListResultPage) NotDone() bool {
26607	return !page.sglr.IsEmpty()
26608}
26609
26610// Response returns the raw server response from the last page request.
26611func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
26612	return page.sglr
26613}
26614
26615// Values returns the slice of values for the current page or nil if there are no values.
26616func (page SecurityGroupListResultPage) Values() []SecurityGroup {
26617	if page.sglr.IsEmpty() {
26618		return nil
26619	}
26620	return *page.sglr.Value
26621}
26622
26623// Creates a new instance of the SecurityGroupListResultPage type.
26624func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
26625	return SecurityGroupListResultPage{fn: getNextPage}
26626}
26627
26628// SecurityGroupNetworkInterface network interface and all its associated security rules.
26629type SecurityGroupNetworkInterface struct {
26630	// ID - ID of the network interface.
26631	ID *string `json:"id,omitempty"`
26632	// SecurityRuleAssociations - All security rules associated with the network interface.
26633	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
26634}
26635
26636// SecurityGroupPropertiesFormat network Security Group resource.
26637type SecurityGroupPropertiesFormat struct {
26638	// SecurityRules - A collection of security rules of the network security group.
26639	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
26640	// DefaultSecurityRules - The default security rules of network security group.
26641	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
26642	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
26643	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
26644	// Subnets - READ-ONLY; A collection of references to subnets.
26645	Subnets *[]Subnet `json:"subnets,omitempty"`
26646	// ResourceGUID - The resource GUID property of the network security group resource.
26647	ResourceGUID *string `json:"resourceGuid,omitempty"`
26648	// ProvisioningState - The provisioning state of the network security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
26649	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
26650}
26651
26652// SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
26653type SecurityGroupResult struct {
26654	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
26655	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
26656	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
26657	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
26658}
26659
26660// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
26661// long-running operation.
26662type SecurityGroupsCreateOrUpdateFuture struct {
26663	azure.Future
26664}
26665
26666// Result returns the result of the asynchronous operation.
26667// If the operation has not completed it will return an error.
26668func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
26669	var done bool
26670	done, err = future.DoneWithContext(context.Background(), client)
26671	if err != nil {
26672		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
26673		return
26674	}
26675	if !done {
26676		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
26677		return
26678	}
26679	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26680	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
26681		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
26682		if err != nil {
26683			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
26684		}
26685	}
26686	return
26687}
26688
26689// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
26690// operation.
26691type SecurityGroupsDeleteFuture struct {
26692	azure.Future
26693}
26694
26695// Result returns the result of the asynchronous operation.
26696// If the operation has not completed it will return an error.
26697func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
26698	var done bool
26699	done, err = future.DoneWithContext(context.Background(), client)
26700	if err != nil {
26701		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
26702		return
26703	}
26704	if !done {
26705		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
26706		return
26707	}
26708	ar.Response = future.Response()
26709	return
26710}
26711
26712// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
26713// long-running operation.
26714type SecurityGroupsUpdateTagsFuture struct {
26715	azure.Future
26716}
26717
26718// Result returns the result of the asynchronous operation.
26719// If the operation has not completed it will return an error.
26720func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
26721	var done bool
26722	done, err = future.DoneWithContext(context.Background(), client)
26723	if err != nil {
26724		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
26725		return
26726	}
26727	if !done {
26728		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
26729		return
26730	}
26731	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
26732	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
26733		sg, err = client.UpdateTagsResponder(sg.Response.Response)
26734		if err != nil {
26735			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
26736		}
26737	}
26738	return
26739}
26740
26741// SecurityGroupViewParameters parameters that define the VM to check security groups for.
26742type SecurityGroupViewParameters struct {
26743	// TargetResourceID - ID of the target VM.
26744	TargetResourceID *string `json:"targetResourceId,omitempty"`
26745}
26746
26747// SecurityGroupViewResult the information about security rules applied to the specified VM.
26748type SecurityGroupViewResult struct {
26749	autorest.Response `json:"-"`
26750	// NetworkInterfaces - List of network interfaces on the specified VM.
26751	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
26752}
26753
26754// SecurityRule network security rule.
26755type SecurityRule struct {
26756	autorest.Response `json:"-"`
26757	// SecurityRulePropertiesFormat - Properties of the security rule.
26758	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
26759	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
26760	Name *string `json:"name,omitempty"`
26761	// Etag - A unique read-only string that changes whenever the resource is updated.
26762	Etag *string `json:"etag,omitempty"`
26763	// ID - Resource ID.
26764	ID *string `json:"id,omitempty"`
26765}
26766
26767// MarshalJSON is the custom marshaler for SecurityRule.
26768func (sr SecurityRule) MarshalJSON() ([]byte, error) {
26769	objectMap := make(map[string]interface{})
26770	if sr.SecurityRulePropertiesFormat != nil {
26771		objectMap["properties"] = sr.SecurityRulePropertiesFormat
26772	}
26773	if sr.Name != nil {
26774		objectMap["name"] = sr.Name
26775	}
26776	if sr.Etag != nil {
26777		objectMap["etag"] = sr.Etag
26778	}
26779	if sr.ID != nil {
26780		objectMap["id"] = sr.ID
26781	}
26782	return json.Marshal(objectMap)
26783}
26784
26785// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
26786func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
26787	var m map[string]*json.RawMessage
26788	err := json.Unmarshal(body, &m)
26789	if err != nil {
26790		return err
26791	}
26792	for k, v := range m {
26793		switch k {
26794		case "properties":
26795			if v != nil {
26796				var securityRulePropertiesFormat SecurityRulePropertiesFormat
26797				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
26798				if err != nil {
26799					return err
26800				}
26801				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
26802			}
26803		case "name":
26804			if v != nil {
26805				var name string
26806				err = json.Unmarshal(*v, &name)
26807				if err != nil {
26808					return err
26809				}
26810				sr.Name = &name
26811			}
26812		case "etag":
26813			if v != nil {
26814				var etag string
26815				err = json.Unmarshal(*v, &etag)
26816				if err != nil {
26817					return err
26818				}
26819				sr.Etag = &etag
26820			}
26821		case "id":
26822			if v != nil {
26823				var ID string
26824				err = json.Unmarshal(*v, &ID)
26825				if err != nil {
26826					return err
26827				}
26828				sr.ID = &ID
26829			}
26830		}
26831	}
26832
26833	return nil
26834}
26835
26836// SecurityRuleAssociations all security rules associated with the network interface.
26837type SecurityRuleAssociations struct {
26838	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
26839	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
26840	// SubnetAssociation - Subnet and it's custom security rules.
26841	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
26842	// DefaultSecurityRules - Collection of default security rules of the network security group.
26843	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
26844	// EffectiveSecurityRules - Collection of effective security rules.
26845	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
26846}
26847
26848// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
26849// belongs to a network security group.
26850type SecurityRuleListResult struct {
26851	autorest.Response `json:"-"`
26852	// Value - The security rules in a network security group.
26853	Value *[]SecurityRule `json:"value,omitempty"`
26854	// NextLink - The URL to get the next set of results.
26855	NextLink *string `json:"nextLink,omitempty"`
26856}
26857
26858// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
26859type SecurityRuleListResultIterator struct {
26860	i    int
26861	page SecurityRuleListResultPage
26862}
26863
26864// NextWithContext advances to the next value.  If there was an error making
26865// the request the iterator does not advance and the error is returned.
26866func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
26867	if tracing.IsEnabled() {
26868		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
26869		defer func() {
26870			sc := -1
26871			if iter.Response().Response.Response != nil {
26872				sc = iter.Response().Response.Response.StatusCode
26873			}
26874			tracing.EndSpan(ctx, sc, err)
26875		}()
26876	}
26877	iter.i++
26878	if iter.i < len(iter.page.Values()) {
26879		return nil
26880	}
26881	err = iter.page.NextWithContext(ctx)
26882	if err != nil {
26883		iter.i--
26884		return err
26885	}
26886	iter.i = 0
26887	return nil
26888}
26889
26890// Next advances to the next value.  If there was an error making
26891// the request the iterator does not advance and the error is returned.
26892// Deprecated: Use NextWithContext() instead.
26893func (iter *SecurityRuleListResultIterator) Next() error {
26894	return iter.NextWithContext(context.Background())
26895}
26896
26897// NotDone returns true if the enumeration should be started or is not yet complete.
26898func (iter SecurityRuleListResultIterator) NotDone() bool {
26899	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26900}
26901
26902// Response returns the raw server response from the last page request.
26903func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
26904	return iter.page.Response()
26905}
26906
26907// Value returns the current value or a zero-initialized value if the
26908// iterator has advanced beyond the end of the collection.
26909func (iter SecurityRuleListResultIterator) Value() SecurityRule {
26910	if !iter.page.NotDone() {
26911		return SecurityRule{}
26912	}
26913	return iter.page.Values()[iter.i]
26914}
26915
26916// Creates a new instance of the SecurityRuleListResultIterator type.
26917func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
26918	return SecurityRuleListResultIterator{page: page}
26919}
26920
26921// IsEmpty returns true if the ListResult contains no values.
26922func (srlr SecurityRuleListResult) IsEmpty() bool {
26923	return srlr.Value == nil || len(*srlr.Value) == 0
26924}
26925
26926// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
26927// It returns nil if no more results exist.
26928func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
26929	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
26930		return nil, nil
26931	}
26932	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26933		autorest.AsJSON(),
26934		autorest.AsGet(),
26935		autorest.WithBaseURL(to.String(srlr.NextLink)))
26936}
26937
26938// SecurityRuleListResultPage contains a page of SecurityRule values.
26939type SecurityRuleListResultPage struct {
26940	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
26941	srlr SecurityRuleListResult
26942}
26943
26944// NextWithContext advances to the next page of values.  If there was an error making
26945// the request the page does not advance and the error is returned.
26946func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
26947	if tracing.IsEnabled() {
26948		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
26949		defer func() {
26950			sc := -1
26951			if page.Response().Response.Response != nil {
26952				sc = page.Response().Response.Response.StatusCode
26953			}
26954			tracing.EndSpan(ctx, sc, err)
26955		}()
26956	}
26957	next, err := page.fn(ctx, page.srlr)
26958	if err != nil {
26959		return err
26960	}
26961	page.srlr = next
26962	return nil
26963}
26964
26965// Next advances to the next page of values.  If there was an error making
26966// the request the page does not advance and the error is returned.
26967// Deprecated: Use NextWithContext() instead.
26968func (page *SecurityRuleListResultPage) Next() error {
26969	return page.NextWithContext(context.Background())
26970}
26971
26972// NotDone returns true if the page enumeration should be started or is not yet complete.
26973func (page SecurityRuleListResultPage) NotDone() bool {
26974	return !page.srlr.IsEmpty()
26975}
26976
26977// Response returns the raw server response from the last page request.
26978func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
26979	return page.srlr
26980}
26981
26982// Values returns the slice of values for the current page or nil if there are no values.
26983func (page SecurityRuleListResultPage) Values() []SecurityRule {
26984	if page.srlr.IsEmpty() {
26985		return nil
26986	}
26987	return *page.srlr.Value
26988}
26989
26990// Creates a new instance of the SecurityRuleListResultPage type.
26991func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
26992	return SecurityRuleListResultPage{fn: getNextPage}
26993}
26994
26995// SecurityRulePropertiesFormat security rule resource.
26996type SecurityRulePropertiesFormat struct {
26997	// Description - A description for this rule. Restricted to 140 chars.
26998	Description *string `json:"description,omitempty"`
26999	// Protocol - Network protocol this rule applies to. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk'
27000	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
27001	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
27002	SourcePortRange *string `json:"sourcePortRange,omitempty"`
27003	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
27004	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
27005	// 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.
27006	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
27007	// SourceAddressPrefixes - The CIDR or source IP ranges.
27008	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
27009	// SourceApplicationSecurityGroups - The application security group specified as source.
27010	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
27011	// 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.
27012	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
27013	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
27014	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
27015	// DestinationApplicationSecurityGroups - The application security group specified as destination.
27016	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
27017	// SourcePortRanges - The source port ranges.
27018	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
27019	// DestinationPortRanges - The destination port ranges.
27020	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
27021	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
27022	Access SecurityRuleAccess `json:"access,omitempty"`
27023	// 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.
27024	Priority *int32 `json:"priority,omitempty"`
27025	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
27026	Direction SecurityRuleDirection `json:"direction,omitempty"`
27027	// ProvisioningState - The provisioning state of the security rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27028	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27029}
27030
27031// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
27032// long-running operation.
27033type SecurityRulesCreateOrUpdateFuture struct {
27034	azure.Future
27035}
27036
27037// Result returns the result of the asynchronous operation.
27038// If the operation has not completed it will return an error.
27039func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
27040	var done bool
27041	done, err = future.DoneWithContext(context.Background(), client)
27042	if err != nil {
27043		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27044		return
27045	}
27046	if !done {
27047		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
27048		return
27049	}
27050	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27051	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
27052		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
27053		if err != nil {
27054			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
27055		}
27056	}
27057	return
27058}
27059
27060// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
27061// operation.
27062type SecurityRulesDeleteFuture struct {
27063	azure.Future
27064}
27065
27066// Result returns the result of the asynchronous operation.
27067// If the operation has not completed it will return an error.
27068func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
27069	var done bool
27070	done, err = future.DoneWithContext(context.Background(), client)
27071	if err != nil {
27072		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
27073		return
27074	}
27075	if !done {
27076		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
27077		return
27078	}
27079	ar.Response = future.Response()
27080	return
27081}
27082
27083// SecurityRulesEvaluationResult network security rules evaluation result.
27084type SecurityRulesEvaluationResult struct {
27085	// Name - Name of the network security rule.
27086	Name *string `json:"name,omitempty"`
27087	// ProtocolMatched - Value indicating whether protocol is matched.
27088	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
27089	// SourceMatched - Value indicating whether source is matched.
27090	SourceMatched *bool `json:"sourceMatched,omitempty"`
27091	// SourcePortMatched - Value indicating whether source port is matched.
27092	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
27093	// DestinationMatched - Value indicating whether destination is matched.
27094	DestinationMatched *bool `json:"destinationMatched,omitempty"`
27095	// DestinationPortMatched - Value indicating whether destination port is matched.
27096	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
27097}
27098
27099// ServiceAssociationLink serviceAssociationLink resource.
27100type ServiceAssociationLink struct {
27101	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
27102	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
27103	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
27104	Name *string `json:"name,omitempty"`
27105	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
27106	Etag *string `json:"etag,omitempty"`
27107	// Type - Resource type.
27108	Type *string `json:"type,omitempty"`
27109	// ID - Resource ID.
27110	ID *string `json:"id,omitempty"`
27111}
27112
27113// MarshalJSON is the custom marshaler for ServiceAssociationLink.
27114func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
27115	objectMap := make(map[string]interface{})
27116	if sal.ServiceAssociationLinkPropertiesFormat != nil {
27117		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
27118	}
27119	if sal.Name != nil {
27120		objectMap["name"] = sal.Name
27121	}
27122	if sal.Type != nil {
27123		objectMap["type"] = sal.Type
27124	}
27125	if sal.ID != nil {
27126		objectMap["id"] = sal.ID
27127	}
27128	return json.Marshal(objectMap)
27129}
27130
27131// UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
27132func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
27133	var m map[string]*json.RawMessage
27134	err := json.Unmarshal(body, &m)
27135	if err != nil {
27136		return err
27137	}
27138	for k, v := range m {
27139		switch k {
27140		case "properties":
27141			if v != nil {
27142				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
27143				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
27144				if err != nil {
27145					return err
27146				}
27147				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
27148			}
27149		case "name":
27150			if v != nil {
27151				var name string
27152				err = json.Unmarshal(*v, &name)
27153				if err != nil {
27154					return err
27155				}
27156				sal.Name = &name
27157			}
27158		case "etag":
27159			if v != nil {
27160				var etag string
27161				err = json.Unmarshal(*v, &etag)
27162				if err != nil {
27163					return err
27164				}
27165				sal.Etag = &etag
27166			}
27167		case "type":
27168			if v != nil {
27169				var typeVar string
27170				err = json.Unmarshal(*v, &typeVar)
27171				if err != nil {
27172					return err
27173				}
27174				sal.Type = &typeVar
27175			}
27176		case "id":
27177			if v != nil {
27178				var ID string
27179				err = json.Unmarshal(*v, &ID)
27180				if err != nil {
27181					return err
27182				}
27183				sal.ID = &ID
27184			}
27185		}
27186	}
27187
27188	return nil
27189}
27190
27191// ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
27192type ServiceAssociationLinkPropertiesFormat struct {
27193	// LinkedResourceType - Resource type of the linked resource.
27194	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
27195	// Link - Link to the external resource.
27196	Link *string `json:"link,omitempty"`
27197	// ProvisioningState - READ-ONLY; The provisioning state of the service association link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27198	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27199	// AllowDelete - If true, the resource can be deleted.
27200	AllowDelete *bool `json:"allowDelete,omitempty"`
27201	// Locations - A list of locations.
27202	Locations *[]string `json:"locations,omitempty"`
27203}
27204
27205// ServiceAssociationLinksListResult response for ServiceAssociationLinks_List operation.
27206type ServiceAssociationLinksListResult struct {
27207	autorest.Response `json:"-"`
27208	// Value - The service association links in a subnet.
27209	Value *[]ServiceAssociationLink `json:"value,omitempty"`
27210	// NextLink - READ-ONLY; The URL to get the next set of results.
27211	NextLink *string `json:"nextLink,omitempty"`
27212}
27213
27214// ServiceDelegationPropertiesFormat properties of a service delegation.
27215type ServiceDelegationPropertiesFormat struct {
27216	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).
27217	ServiceName *string `json:"serviceName,omitempty"`
27218	// Actions - Describes the actions permitted to the service upon delegation.
27219	Actions *[]string `json:"actions,omitempty"`
27220	// ProvisioningState - READ-ONLY; The provisioning state of the service delegation resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27221	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27222}
27223
27224// ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
27225// a long-running operation.
27226type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
27227	azure.Future
27228}
27229
27230// Result returns the result of the asynchronous operation.
27231// If the operation has not completed it will return an error.
27232func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
27233	var done bool
27234	done, err = future.DoneWithContext(context.Background(), client)
27235	if err != nil {
27236		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27237		return
27238	}
27239	if !done {
27240		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
27241		return
27242	}
27243	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27244	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
27245		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
27246		if err != nil {
27247			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
27248		}
27249	}
27250	return
27251}
27252
27253// ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
27254// long-running operation.
27255type ServiceEndpointPoliciesDeleteFuture struct {
27256	azure.Future
27257}
27258
27259// Result returns the result of the asynchronous operation.
27260// If the operation has not completed it will return an error.
27261func (future *ServiceEndpointPoliciesDeleteFuture) Result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
27262	var done bool
27263	done, err = future.DoneWithContext(context.Background(), client)
27264	if err != nil {
27265		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
27266		return
27267	}
27268	if !done {
27269		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
27270		return
27271	}
27272	ar.Response = future.Response()
27273	return
27274}
27275
27276// ServiceEndpointPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
27277// long-running operation.
27278type ServiceEndpointPoliciesUpdateFuture struct {
27279	azure.Future
27280}
27281
27282// Result returns the result of the asynchronous operation.
27283// If the operation has not completed it will return an error.
27284func (future *ServiceEndpointPoliciesUpdateFuture) Result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
27285	var done bool
27286	done, err = future.DoneWithContext(context.Background(), client)
27287	if err != nil {
27288		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
27289		return
27290	}
27291	if !done {
27292		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesUpdateFuture")
27293		return
27294	}
27295	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27296	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
27297		sep, err = client.UpdateResponder(sep.Response.Response)
27298		if err != nil {
27299			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
27300		}
27301	}
27302	return
27303}
27304
27305// ServiceEndpointPolicy service End point policy resource.
27306type ServiceEndpointPolicy struct {
27307	autorest.Response `json:"-"`
27308	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy.
27309	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
27310	// Etag - A unique read-only string that changes whenever the resource is updated.
27311	Etag *string `json:"etag,omitempty"`
27312	// ID - Resource ID.
27313	ID *string `json:"id,omitempty"`
27314	// Name - READ-ONLY; Resource name.
27315	Name *string `json:"name,omitempty"`
27316	// Type - READ-ONLY; Resource type.
27317	Type *string `json:"type,omitempty"`
27318	// Location - Resource location.
27319	Location *string `json:"location,omitempty"`
27320	// Tags - Resource tags.
27321	Tags map[string]*string `json:"tags"`
27322}
27323
27324// MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
27325func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
27326	objectMap := make(map[string]interface{})
27327	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
27328		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
27329	}
27330	if sep.Etag != nil {
27331		objectMap["etag"] = sep.Etag
27332	}
27333	if sep.ID != nil {
27334		objectMap["id"] = sep.ID
27335	}
27336	if sep.Location != nil {
27337		objectMap["location"] = sep.Location
27338	}
27339	if sep.Tags != nil {
27340		objectMap["tags"] = sep.Tags
27341	}
27342	return json.Marshal(objectMap)
27343}
27344
27345// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
27346func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
27347	var m map[string]*json.RawMessage
27348	err := json.Unmarshal(body, &m)
27349	if err != nil {
27350		return err
27351	}
27352	for k, v := range m {
27353		switch k {
27354		case "properties":
27355			if v != nil {
27356				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
27357				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
27358				if err != nil {
27359					return err
27360				}
27361				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
27362			}
27363		case "etag":
27364			if v != nil {
27365				var etag string
27366				err = json.Unmarshal(*v, &etag)
27367				if err != nil {
27368					return err
27369				}
27370				sep.Etag = &etag
27371			}
27372		case "id":
27373			if v != nil {
27374				var ID string
27375				err = json.Unmarshal(*v, &ID)
27376				if err != nil {
27377					return err
27378				}
27379				sep.ID = &ID
27380			}
27381		case "name":
27382			if v != nil {
27383				var name string
27384				err = json.Unmarshal(*v, &name)
27385				if err != nil {
27386					return err
27387				}
27388				sep.Name = &name
27389			}
27390		case "type":
27391			if v != nil {
27392				var typeVar string
27393				err = json.Unmarshal(*v, &typeVar)
27394				if err != nil {
27395					return err
27396				}
27397				sep.Type = &typeVar
27398			}
27399		case "location":
27400			if v != nil {
27401				var location string
27402				err = json.Unmarshal(*v, &location)
27403				if err != nil {
27404					return err
27405				}
27406				sep.Location = &location
27407			}
27408		case "tags":
27409			if v != nil {
27410				var tags map[string]*string
27411				err = json.Unmarshal(*v, &tags)
27412				if err != nil {
27413					return err
27414				}
27415				sep.Tags = tags
27416			}
27417		}
27418	}
27419
27420	return nil
27421}
27422
27423// ServiceEndpointPolicyDefinition service Endpoint policy definitions.
27424type ServiceEndpointPolicyDefinition struct {
27425	autorest.Response `json:"-"`
27426	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition.
27427	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
27428	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27429	Name *string `json:"name,omitempty"`
27430	// Etag - A unique read-only string that changes whenever the resource is updated.
27431	Etag *string `json:"etag,omitempty"`
27432	// ID - Resource ID.
27433	ID *string `json:"id,omitempty"`
27434}
27435
27436// MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
27437func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
27438	objectMap := make(map[string]interface{})
27439	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
27440		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
27441	}
27442	if sepd.Name != nil {
27443		objectMap["name"] = sepd.Name
27444	}
27445	if sepd.Etag != nil {
27446		objectMap["etag"] = sepd.Etag
27447	}
27448	if sepd.ID != nil {
27449		objectMap["id"] = sepd.ID
27450	}
27451	return json.Marshal(objectMap)
27452}
27453
27454// UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
27455func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
27456	var m map[string]*json.RawMessage
27457	err := json.Unmarshal(body, &m)
27458	if err != nil {
27459		return err
27460	}
27461	for k, v := range m {
27462		switch k {
27463		case "properties":
27464			if v != nil {
27465				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
27466				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
27467				if err != nil {
27468					return err
27469				}
27470				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
27471			}
27472		case "name":
27473			if v != nil {
27474				var name string
27475				err = json.Unmarshal(*v, &name)
27476				if err != nil {
27477					return err
27478				}
27479				sepd.Name = &name
27480			}
27481		case "etag":
27482			if v != nil {
27483				var etag string
27484				err = json.Unmarshal(*v, &etag)
27485				if err != nil {
27486					return err
27487				}
27488				sepd.Etag = &etag
27489			}
27490		case "id":
27491			if v != nil {
27492				var ID string
27493				err = json.Unmarshal(*v, &ID)
27494				if err != nil {
27495					return err
27496				}
27497				sepd.ID = &ID
27498			}
27499		}
27500	}
27501
27502	return nil
27503}
27504
27505// ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
27506// call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
27507type ServiceEndpointPolicyDefinitionListResult struct {
27508	autorest.Response `json:"-"`
27509	// Value - The service endpoint policy definition in a service endpoint policy.
27510	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
27511	// NextLink - The URL to get the next set of results.
27512	NextLink *string `json:"nextLink,omitempty"`
27513}
27514
27515// ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
27516// ServiceEndpointPolicyDefinition values.
27517type ServiceEndpointPolicyDefinitionListResultIterator struct {
27518	i    int
27519	page ServiceEndpointPolicyDefinitionListResultPage
27520}
27521
27522// NextWithContext advances to the next value.  If there was an error making
27523// the request the iterator does not advance and the error is returned.
27524func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
27525	if tracing.IsEnabled() {
27526		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
27527		defer func() {
27528			sc := -1
27529			if iter.Response().Response.Response != nil {
27530				sc = iter.Response().Response.Response.StatusCode
27531			}
27532			tracing.EndSpan(ctx, sc, err)
27533		}()
27534	}
27535	iter.i++
27536	if iter.i < len(iter.page.Values()) {
27537		return nil
27538	}
27539	err = iter.page.NextWithContext(ctx)
27540	if err != nil {
27541		iter.i--
27542		return err
27543	}
27544	iter.i = 0
27545	return nil
27546}
27547
27548// Next advances to the next value.  If there was an error making
27549// the request the iterator does not advance and the error is returned.
27550// Deprecated: Use NextWithContext() instead.
27551func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
27552	return iter.NextWithContext(context.Background())
27553}
27554
27555// NotDone returns true if the enumeration should be started or is not yet complete.
27556func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
27557	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27558}
27559
27560// Response returns the raw server response from the last page request.
27561func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
27562	return iter.page.Response()
27563}
27564
27565// Value returns the current value or a zero-initialized value if the
27566// iterator has advanced beyond the end of the collection.
27567func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
27568	if !iter.page.NotDone() {
27569		return ServiceEndpointPolicyDefinition{}
27570	}
27571	return iter.page.Values()[iter.i]
27572}
27573
27574// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
27575func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
27576	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
27577}
27578
27579// IsEmpty returns true if the ListResult contains no values.
27580func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
27581	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
27582}
27583
27584// serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
27585// It returns nil if no more results exist.
27586func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
27587	if sepdlr.NextLink == nil || len(to.String(sepdlr.NextLink)) < 1 {
27588		return nil, nil
27589	}
27590	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27591		autorest.AsJSON(),
27592		autorest.AsGet(),
27593		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
27594}
27595
27596// ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
27597type ServiceEndpointPolicyDefinitionListResultPage struct {
27598	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
27599	sepdlr ServiceEndpointPolicyDefinitionListResult
27600}
27601
27602// NextWithContext advances to the next page of values.  If there was an error making
27603// the request the page does not advance and the error is returned.
27604func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
27605	if tracing.IsEnabled() {
27606		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
27607		defer func() {
27608			sc := -1
27609			if page.Response().Response.Response != nil {
27610				sc = page.Response().Response.Response.StatusCode
27611			}
27612			tracing.EndSpan(ctx, sc, err)
27613		}()
27614	}
27615	next, err := page.fn(ctx, page.sepdlr)
27616	if err != nil {
27617		return err
27618	}
27619	page.sepdlr = next
27620	return nil
27621}
27622
27623// Next advances to the next page of values.  If there was an error making
27624// the request the page does not advance and the error is returned.
27625// Deprecated: Use NextWithContext() instead.
27626func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
27627	return page.NextWithContext(context.Background())
27628}
27629
27630// NotDone returns true if the page enumeration should be started or is not yet complete.
27631func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
27632	return !page.sepdlr.IsEmpty()
27633}
27634
27635// Response returns the raw server response from the last page request.
27636func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
27637	return page.sepdlr
27638}
27639
27640// Values returns the slice of values for the current page or nil if there are no values.
27641func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
27642	if page.sepdlr.IsEmpty() {
27643		return nil
27644	}
27645	return *page.sepdlr.Value
27646}
27647
27648// Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
27649func NewServiceEndpointPolicyDefinitionListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
27650	return ServiceEndpointPolicyDefinitionListResultPage{fn: getNextPage}
27651}
27652
27653// ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
27654type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
27655	// Description - A description for this rule. Restricted to 140 chars.
27656	Description *string `json:"description,omitempty"`
27657	// Service - Service endpoint name.
27658	Service *string `json:"service,omitempty"`
27659	// ServiceResources - A list of service resources.
27660	ServiceResources *[]string `json:"serviceResources,omitempty"`
27661	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy definition resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27662	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27663}
27664
27665// ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
27666// results of a long-running operation.
27667type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
27668	azure.Future
27669}
27670
27671// Result returns the result of the asynchronous operation.
27672// If the operation has not completed it will return an error.
27673func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
27674	var done bool
27675	done, err = future.DoneWithContext(context.Background(), client)
27676	if err != nil {
27677		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
27678		return
27679	}
27680	if !done {
27681		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
27682		return
27683	}
27684	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
27685	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
27686		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
27687		if err != nil {
27688			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
27689		}
27690	}
27691	return
27692}
27693
27694// ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
27695// a long-running operation.
27696type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
27697	azure.Future
27698}
27699
27700// Result returns the result of the asynchronous operation.
27701// If the operation has not completed it will return an error.
27702func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) Result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
27703	var done bool
27704	done, err = future.DoneWithContext(context.Background(), client)
27705	if err != nil {
27706		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
27707		return
27708	}
27709	if !done {
27710		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
27711		return
27712	}
27713	ar.Response = future.Response()
27714	return
27715}
27716
27717// ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
27718type ServiceEndpointPolicyListResult struct {
27719	autorest.Response `json:"-"`
27720	// Value - A list of ServiceEndpointPolicy resources.
27721	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
27722	// NextLink - READ-ONLY; The URL to get the next set of results.
27723	NextLink *string `json:"nextLink,omitempty"`
27724}
27725
27726// ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
27727// values.
27728type ServiceEndpointPolicyListResultIterator struct {
27729	i    int
27730	page ServiceEndpointPolicyListResultPage
27731}
27732
27733// NextWithContext advances to the next value.  If there was an error making
27734// the request the iterator does not advance and the error is returned.
27735func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
27736	if tracing.IsEnabled() {
27737		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
27738		defer func() {
27739			sc := -1
27740			if iter.Response().Response.Response != nil {
27741				sc = iter.Response().Response.Response.StatusCode
27742			}
27743			tracing.EndSpan(ctx, sc, err)
27744		}()
27745	}
27746	iter.i++
27747	if iter.i < len(iter.page.Values()) {
27748		return nil
27749	}
27750	err = iter.page.NextWithContext(ctx)
27751	if err != nil {
27752		iter.i--
27753		return err
27754	}
27755	iter.i = 0
27756	return nil
27757}
27758
27759// Next advances to the next value.  If there was an error making
27760// the request the iterator does not advance and the error is returned.
27761// Deprecated: Use NextWithContext() instead.
27762func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
27763	return iter.NextWithContext(context.Background())
27764}
27765
27766// NotDone returns true if the enumeration should be started or is not yet complete.
27767func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
27768	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27769}
27770
27771// Response returns the raw server response from the last page request.
27772func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
27773	return iter.page.Response()
27774}
27775
27776// Value returns the current value or a zero-initialized value if the
27777// iterator has advanced beyond the end of the collection.
27778func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
27779	if !iter.page.NotDone() {
27780		return ServiceEndpointPolicy{}
27781	}
27782	return iter.page.Values()[iter.i]
27783}
27784
27785// Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
27786func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
27787	return ServiceEndpointPolicyListResultIterator{page: page}
27788}
27789
27790// IsEmpty returns true if the ListResult contains no values.
27791func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
27792	return seplr.Value == nil || len(*seplr.Value) == 0
27793}
27794
27795// serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
27796// It returns nil if no more results exist.
27797func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
27798	if seplr.NextLink == nil || len(to.String(seplr.NextLink)) < 1 {
27799		return nil, nil
27800	}
27801	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27802		autorest.AsJSON(),
27803		autorest.AsGet(),
27804		autorest.WithBaseURL(to.String(seplr.NextLink)))
27805}
27806
27807// ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
27808type ServiceEndpointPolicyListResultPage struct {
27809	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
27810	seplr ServiceEndpointPolicyListResult
27811}
27812
27813// NextWithContext advances to the next page of values.  If there was an error making
27814// the request the page does not advance and the error is returned.
27815func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
27816	if tracing.IsEnabled() {
27817		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
27818		defer func() {
27819			sc := -1
27820			if page.Response().Response.Response != nil {
27821				sc = page.Response().Response.Response.StatusCode
27822			}
27823			tracing.EndSpan(ctx, sc, err)
27824		}()
27825	}
27826	next, err := page.fn(ctx, page.seplr)
27827	if err != nil {
27828		return err
27829	}
27830	page.seplr = next
27831	return nil
27832}
27833
27834// Next advances to the next page of values.  If there was an error making
27835// the request the page does not advance and the error is returned.
27836// Deprecated: Use NextWithContext() instead.
27837func (page *ServiceEndpointPolicyListResultPage) Next() error {
27838	return page.NextWithContext(context.Background())
27839}
27840
27841// NotDone returns true if the page enumeration should be started or is not yet complete.
27842func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
27843	return !page.seplr.IsEmpty()
27844}
27845
27846// Response returns the raw server response from the last page request.
27847func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
27848	return page.seplr
27849}
27850
27851// Values returns the slice of values for the current page or nil if there are no values.
27852func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
27853	if page.seplr.IsEmpty() {
27854		return nil
27855	}
27856	return *page.seplr.Value
27857}
27858
27859// Creates a new instance of the ServiceEndpointPolicyListResultPage type.
27860func NewServiceEndpointPolicyListResultPage(getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
27861	return ServiceEndpointPolicyListResultPage{fn: getNextPage}
27862}
27863
27864// ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
27865type ServiceEndpointPolicyPropertiesFormat struct {
27866	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
27867	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
27868	// Subnets - READ-ONLY; A collection of references to subnets.
27869	Subnets *[]Subnet `json:"subnets,omitempty"`
27870	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
27871	ResourceGUID *string `json:"resourceGuid,omitempty"`
27872	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27873	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27874}
27875
27876// ServiceEndpointPropertiesFormat the service endpoint properties.
27877type ServiceEndpointPropertiesFormat struct {
27878	// Service - The type of the endpoint service.
27879	Service *string `json:"service,omitempty"`
27880	// Locations - A list of locations.
27881	Locations *[]string `json:"locations,omitempty"`
27882	// ProvisioningState - The provisioning state of the service endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
27883	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
27884}
27885
27886// ServiceTagInformation the service tag information.
27887type ServiceTagInformation struct {
27888	// Properties - READ-ONLY; Properties of the service tag information.
27889	Properties *ServiceTagInformationPropertiesFormat `json:"properties,omitempty"`
27890	// Name - READ-ONLY; The name of service tag.
27891	Name *string `json:"name,omitempty"`
27892	// ID - READ-ONLY; The ID of service tag.
27893	ID *string `json:"id,omitempty"`
27894}
27895
27896// ServiceTagInformationPropertiesFormat properties of the service tag information.
27897type ServiceTagInformationPropertiesFormat struct {
27898	// ChangeNumber - READ-ONLY; The iteration number of service tag.
27899	ChangeNumber *string `json:"changeNumber,omitempty"`
27900	// Region - READ-ONLY; The region of service tag.
27901	Region *string `json:"region,omitempty"`
27902	// SystemService - READ-ONLY; The name of system service.
27903	SystemService *string `json:"systemService,omitempty"`
27904	// AddressPrefixes - READ-ONLY; The list of IP address prefixes.
27905	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
27906}
27907
27908// ServiceTagsListResult response for the ListServiceTags API service call.
27909type ServiceTagsListResult struct {
27910	autorest.Response `json:"-"`
27911	// Name - READ-ONLY; The name of the cloud.
27912	Name *string `json:"name,omitempty"`
27913	// ID - READ-ONLY; The ID of the cloud.
27914	ID *string `json:"id,omitempty"`
27915	// Type - READ-ONLY; The azure resource type.
27916	Type *string `json:"type,omitempty"`
27917	// ChangeNumber - READ-ONLY; The iteration number.
27918	ChangeNumber *string `json:"changeNumber,omitempty"`
27919	// Cloud - READ-ONLY; The name of the cloud.
27920	Cloud *string `json:"cloud,omitempty"`
27921	// Values - READ-ONLY; The list of service tag information resources.
27922	Values *[]ServiceTagInformation `json:"values,omitempty"`
27923}
27924
27925// String ...
27926type String struct {
27927	autorest.Response `json:"-"`
27928	Value             *string `json:"value,omitempty"`
27929}
27930
27931// Subnet subnet in a virtual network resource.
27932type Subnet struct {
27933	autorest.Response `json:"-"`
27934	// SubnetPropertiesFormat - Properties of the subnet.
27935	*SubnetPropertiesFormat `json:"properties,omitempty"`
27936	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
27937	Name *string `json:"name,omitempty"`
27938	// Etag - A unique read-only string that changes whenever the resource is updated.
27939	Etag *string `json:"etag,omitempty"`
27940	// ID - Resource ID.
27941	ID *string `json:"id,omitempty"`
27942}
27943
27944// MarshalJSON is the custom marshaler for Subnet.
27945func (s Subnet) MarshalJSON() ([]byte, error) {
27946	objectMap := make(map[string]interface{})
27947	if s.SubnetPropertiesFormat != nil {
27948		objectMap["properties"] = s.SubnetPropertiesFormat
27949	}
27950	if s.Name != nil {
27951		objectMap["name"] = s.Name
27952	}
27953	if s.Etag != nil {
27954		objectMap["etag"] = s.Etag
27955	}
27956	if s.ID != nil {
27957		objectMap["id"] = s.ID
27958	}
27959	return json.Marshal(objectMap)
27960}
27961
27962// UnmarshalJSON is the custom unmarshaler for Subnet struct.
27963func (s *Subnet) UnmarshalJSON(body []byte) error {
27964	var m map[string]*json.RawMessage
27965	err := json.Unmarshal(body, &m)
27966	if err != nil {
27967		return err
27968	}
27969	for k, v := range m {
27970		switch k {
27971		case "properties":
27972			if v != nil {
27973				var subnetPropertiesFormat SubnetPropertiesFormat
27974				err = json.Unmarshal(*v, &subnetPropertiesFormat)
27975				if err != nil {
27976					return err
27977				}
27978				s.SubnetPropertiesFormat = &subnetPropertiesFormat
27979			}
27980		case "name":
27981			if v != nil {
27982				var name string
27983				err = json.Unmarshal(*v, &name)
27984				if err != nil {
27985					return err
27986				}
27987				s.Name = &name
27988			}
27989		case "etag":
27990			if v != nil {
27991				var etag string
27992				err = json.Unmarshal(*v, &etag)
27993				if err != nil {
27994					return err
27995				}
27996				s.Etag = &etag
27997			}
27998		case "id":
27999			if v != nil {
28000				var ID string
28001				err = json.Unmarshal(*v, &ID)
28002				if err != nil {
28003					return err
28004				}
28005				s.ID = &ID
28006			}
28007		}
28008	}
28009
28010	return nil
28011}
28012
28013// SubnetAssociation subnet and it's custom security rules.
28014type SubnetAssociation struct {
28015	// ID - READ-ONLY; Subnet ID.
28016	ID *string `json:"id,omitempty"`
28017	// SecurityRules - Collection of custom security rules.
28018	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
28019}
28020
28021// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
28022// network.
28023type SubnetListResult struct {
28024	autorest.Response `json:"-"`
28025	// Value - The subnets in a virtual network.
28026	Value *[]Subnet `json:"value,omitempty"`
28027	// NextLink - The URL to get the next set of results.
28028	NextLink *string `json:"nextLink,omitempty"`
28029}
28030
28031// SubnetListResultIterator provides access to a complete listing of Subnet values.
28032type SubnetListResultIterator struct {
28033	i    int
28034	page SubnetListResultPage
28035}
28036
28037// NextWithContext advances to the next value.  If there was an error making
28038// the request the iterator does not advance and the error is returned.
28039func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
28040	if tracing.IsEnabled() {
28041		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
28042		defer func() {
28043			sc := -1
28044			if iter.Response().Response.Response != nil {
28045				sc = iter.Response().Response.Response.StatusCode
28046			}
28047			tracing.EndSpan(ctx, sc, err)
28048		}()
28049	}
28050	iter.i++
28051	if iter.i < len(iter.page.Values()) {
28052		return nil
28053	}
28054	err = iter.page.NextWithContext(ctx)
28055	if err != nil {
28056		iter.i--
28057		return err
28058	}
28059	iter.i = 0
28060	return nil
28061}
28062
28063// Next advances to the next value.  If there was an error making
28064// the request the iterator does not advance and the error is returned.
28065// Deprecated: Use NextWithContext() instead.
28066func (iter *SubnetListResultIterator) Next() error {
28067	return iter.NextWithContext(context.Background())
28068}
28069
28070// NotDone returns true if the enumeration should be started or is not yet complete.
28071func (iter SubnetListResultIterator) NotDone() bool {
28072	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28073}
28074
28075// Response returns the raw server response from the last page request.
28076func (iter SubnetListResultIterator) Response() SubnetListResult {
28077	return iter.page.Response()
28078}
28079
28080// Value returns the current value or a zero-initialized value if the
28081// iterator has advanced beyond the end of the collection.
28082func (iter SubnetListResultIterator) Value() Subnet {
28083	if !iter.page.NotDone() {
28084		return Subnet{}
28085	}
28086	return iter.page.Values()[iter.i]
28087}
28088
28089// Creates a new instance of the SubnetListResultIterator type.
28090func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
28091	return SubnetListResultIterator{page: page}
28092}
28093
28094// IsEmpty returns true if the ListResult contains no values.
28095func (slr SubnetListResult) IsEmpty() bool {
28096	return slr.Value == nil || len(*slr.Value) == 0
28097}
28098
28099// subnetListResultPreparer prepares a request to retrieve the next set of results.
28100// It returns nil if no more results exist.
28101func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
28102	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
28103		return nil, nil
28104	}
28105	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28106		autorest.AsJSON(),
28107		autorest.AsGet(),
28108		autorest.WithBaseURL(to.String(slr.NextLink)))
28109}
28110
28111// SubnetListResultPage contains a page of Subnet values.
28112type SubnetListResultPage struct {
28113	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
28114	slr SubnetListResult
28115}
28116
28117// NextWithContext advances to the next page of values.  If there was an error making
28118// the request the page does not advance and the error is returned.
28119func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
28120	if tracing.IsEnabled() {
28121		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
28122		defer func() {
28123			sc := -1
28124			if page.Response().Response.Response != nil {
28125				sc = page.Response().Response.Response.StatusCode
28126			}
28127			tracing.EndSpan(ctx, sc, err)
28128		}()
28129	}
28130	next, err := page.fn(ctx, page.slr)
28131	if err != nil {
28132		return err
28133	}
28134	page.slr = next
28135	return nil
28136}
28137
28138// Next advances to the next page of values.  If there was an error making
28139// the request the page does not advance and the error is returned.
28140// Deprecated: Use NextWithContext() instead.
28141func (page *SubnetListResultPage) Next() error {
28142	return page.NextWithContext(context.Background())
28143}
28144
28145// NotDone returns true if the page enumeration should be started or is not yet complete.
28146func (page SubnetListResultPage) NotDone() bool {
28147	return !page.slr.IsEmpty()
28148}
28149
28150// Response returns the raw server response from the last page request.
28151func (page SubnetListResultPage) Response() SubnetListResult {
28152	return page.slr
28153}
28154
28155// Values returns the slice of values for the current page or nil if there are no values.
28156func (page SubnetListResultPage) Values() []Subnet {
28157	if page.slr.IsEmpty() {
28158		return nil
28159	}
28160	return *page.slr.Value
28161}
28162
28163// Creates a new instance of the SubnetListResultPage type.
28164func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
28165	return SubnetListResultPage{fn: getNextPage}
28166}
28167
28168// SubnetPropertiesFormat properties of the subnet.
28169type SubnetPropertiesFormat struct {
28170	// AddressPrefix - The address prefix for the subnet.
28171	AddressPrefix *string `json:"addressPrefix,omitempty"`
28172	// AddressPrefixes - List of address prefixes for the subnet.
28173	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
28174	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
28175	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
28176	// RouteTable - The reference of the RouteTable resource.
28177	RouteTable *RouteTable `json:"routeTable,omitempty"`
28178	// NatGateway - Nat gateway associated with this subnet.
28179	NatGateway *SubResource `json:"natGateway,omitempty"`
28180	// ServiceEndpoints - An array of service endpoints.
28181	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
28182	// ServiceEndpointPolicies - An array of service endpoint policies.
28183	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
28184	// PrivateEndpoints - READ-ONLY; An array of references to private endpoints.
28185	PrivateEndpoints *[]PrivateEndpoint `json:"privateEndpoints,omitempty"`
28186	// IPConfigurations - READ-ONLY; An array of references to the network interface IP configurations using subnet.
28187	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
28188	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
28189	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
28190	// ResourceNavigationLinks - An array of references to the external resources using subnet.
28191	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
28192	// ServiceAssociationLinks - An array of references to services injecting into this subnet.
28193	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
28194	// Delegations - An array of references to the delegations on the subnet.
28195	Delegations *[]Delegation `json:"delegations,omitempty"`
28196	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
28197	Purpose *string `json:"purpose,omitempty"`
28198	// ProvisioningState - The provisioning state of the subnet resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28199	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28200	// PrivateEndpointNetworkPolicies - Enable or Disable apply network policies on private end point in the subnet.
28201	PrivateEndpointNetworkPolicies *string `json:"privateEndpointNetworkPolicies,omitempty"`
28202	// PrivateLinkServiceNetworkPolicies - Enable or Disable apply network policies on private link service in the subnet.
28203	PrivateLinkServiceNetworkPolicies *string `json:"privateLinkServiceNetworkPolicies,omitempty"`
28204}
28205
28206// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
28207// operation.
28208type SubnetsCreateOrUpdateFuture struct {
28209	azure.Future
28210}
28211
28212// Result returns the result of the asynchronous operation.
28213// If the operation has not completed it will return an error.
28214func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
28215	var done bool
28216	done, err = future.DoneWithContext(context.Background(), client)
28217	if err != nil {
28218		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28219		return
28220	}
28221	if !done {
28222		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
28223		return
28224	}
28225	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28226	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
28227		s, err = client.CreateOrUpdateResponder(s.Response.Response)
28228		if err != nil {
28229			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
28230		}
28231	}
28232	return
28233}
28234
28235// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28236// operation.
28237type SubnetsDeleteFuture struct {
28238	azure.Future
28239}
28240
28241// Result returns the result of the asynchronous operation.
28242// If the operation has not completed it will return an error.
28243func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
28244	var done bool
28245	done, err = future.DoneWithContext(context.Background(), client)
28246	if err != nil {
28247		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
28248		return
28249	}
28250	if !done {
28251		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
28252		return
28253	}
28254	ar.Response = future.Response()
28255	return
28256}
28257
28258// SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
28259// long-running operation.
28260type SubnetsPrepareNetworkPoliciesFuture struct {
28261	azure.Future
28262}
28263
28264// Result returns the result of the asynchronous operation.
28265// If the operation has not completed it will return an error.
28266func (future *SubnetsPrepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
28267	var done bool
28268	done, err = future.DoneWithContext(context.Background(), client)
28269	if err != nil {
28270		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
28271		return
28272	}
28273	if !done {
28274		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
28275		return
28276	}
28277	ar.Response = future.Response()
28278	return
28279}
28280
28281// SubnetsUnprepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
28282// long-running operation.
28283type SubnetsUnprepareNetworkPoliciesFuture struct {
28284	azure.Future
28285}
28286
28287// Result returns the result of the asynchronous operation.
28288// If the operation has not completed it will return an error.
28289func (future *SubnetsUnprepareNetworkPoliciesFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
28290	var done bool
28291	done, err = future.DoneWithContext(context.Background(), client)
28292	if err != nil {
28293		err = autorest.NewErrorWithError(err, "network.SubnetsUnprepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
28294		return
28295	}
28296	if !done {
28297		err = azure.NewAsyncOpIncompleteError("network.SubnetsUnprepareNetworkPoliciesFuture")
28298		return
28299	}
28300	ar.Response = future.Response()
28301	return
28302}
28303
28304// SubResource reference to another subresource.
28305type SubResource struct {
28306	// ID - Resource ID.
28307	ID *string `json:"id,omitempty"`
28308}
28309
28310// TagsObject tags object for patch operations.
28311type TagsObject struct {
28312	// Tags - Resource tags.
28313	Tags map[string]*string `json:"tags"`
28314}
28315
28316// MarshalJSON is the custom marshaler for TagsObject.
28317func (toVar TagsObject) MarshalJSON() ([]byte, error) {
28318	objectMap := make(map[string]interface{})
28319	if toVar.Tags != nil {
28320		objectMap["tags"] = toVar.Tags
28321	}
28322	return json.Marshal(objectMap)
28323}
28324
28325// Topology topology of the specified resource group.
28326type Topology struct {
28327	autorest.Response `json:"-"`
28328	// ID - READ-ONLY; GUID representing the operation id.
28329	ID *string `json:"id,omitempty"`
28330	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
28331	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
28332	// LastModified - READ-ONLY; The datetime when the topology was last modified.
28333	LastModified *date.Time `json:"lastModified,omitempty"`
28334	// Resources - A list of topology resources.
28335	Resources *[]TopologyResource `json:"resources,omitempty"`
28336}
28337
28338// TopologyAssociation resources that have an association with the parent resource.
28339type TopologyAssociation struct {
28340	// Name - The name of the resource that is associated with the parent resource.
28341	Name *string `json:"name,omitempty"`
28342	// ResourceID - The ID of the resource that is associated with the parent resource.
28343	ResourceID *string `json:"resourceId,omitempty"`
28344	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
28345	AssociationType AssociationType `json:"associationType,omitempty"`
28346}
28347
28348// TopologyParameters parameters that define the representation of topology.
28349type TopologyParameters struct {
28350	// TargetResourceGroupName - The name of the target resource group to perform topology on.
28351	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
28352	// TargetVirtualNetwork - The reference of the Virtual Network resource.
28353	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
28354	// TargetSubnet - The reference of the Subnet resource.
28355	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
28356}
28357
28358// TopologyResource the network resource topology information for the given resource group.
28359type TopologyResource struct {
28360	// Name - Name of the resource.
28361	Name *string `json:"name,omitempty"`
28362	// ID - ID of the resource.
28363	ID *string `json:"id,omitempty"`
28364	// Location - Resource location.
28365	Location *string `json:"location,omitempty"`
28366	// Associations - Holds the associations the resource has with other resources in the resource group.
28367	Associations *[]TopologyAssociation `json:"associations,omitempty"`
28368}
28369
28370// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
28371type TrafficAnalyticsConfigurationProperties struct {
28372	// Enabled - Flag to enable/disable traffic analytics.
28373	Enabled *bool `json:"enabled,omitempty"`
28374	// WorkspaceID - The resource guid of the attached workspace.
28375	WorkspaceID *string `json:"workspaceId,omitempty"`
28376	// WorkspaceRegion - The location of the attached workspace.
28377	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
28378	// WorkspaceResourceID - Resource Id of the attached workspace.
28379	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
28380	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics.
28381	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
28382}
28383
28384// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
28385type TrafficAnalyticsProperties struct {
28386	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
28387	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
28388}
28389
28390// TrafficSelectorPolicy an traffic selector policy for a virtual network gateway connection.
28391type TrafficSelectorPolicy struct {
28392	// LocalAddressRanges - A collection of local address spaces in CIDR format
28393	LocalAddressRanges *[]string `json:"localAddressRanges,omitempty"`
28394	// RemoteAddressRanges - A collection of remote address spaces in CIDR format
28395	RemoteAddressRanges *[]string `json:"remoteAddressRanges,omitempty"`
28396}
28397
28398// TroubleshootingDetails information gained from troubleshooting of specified resource.
28399type TroubleshootingDetails struct {
28400	// ID - The id of the get troubleshoot operation.
28401	ID *string `json:"id,omitempty"`
28402	// ReasonType - Reason type of failure.
28403	ReasonType *string `json:"reasonType,omitempty"`
28404	// Summary - A summary of troubleshooting.
28405	Summary *string `json:"summary,omitempty"`
28406	// Detail - Details on troubleshooting results.
28407	Detail *string `json:"detail,omitempty"`
28408	// RecommendedActions - List of recommended actions.
28409	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
28410}
28411
28412// TroubleshootingParameters parameters that define the resource to troubleshoot.
28413type TroubleshootingParameters struct {
28414	// TargetResourceID - The target resource to troubleshoot.
28415	TargetResourceID *string `json:"targetResourceId,omitempty"`
28416	// TroubleshootingProperties - Properties of the troubleshooting resource.
28417	*TroubleshootingProperties `json:"properties,omitempty"`
28418}
28419
28420// MarshalJSON is the custom marshaler for TroubleshootingParameters.
28421func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
28422	objectMap := make(map[string]interface{})
28423	if tp.TargetResourceID != nil {
28424		objectMap["targetResourceId"] = tp.TargetResourceID
28425	}
28426	if tp.TroubleshootingProperties != nil {
28427		objectMap["properties"] = tp.TroubleshootingProperties
28428	}
28429	return json.Marshal(objectMap)
28430}
28431
28432// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
28433func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
28434	var m map[string]*json.RawMessage
28435	err := json.Unmarshal(body, &m)
28436	if err != nil {
28437		return err
28438	}
28439	for k, v := range m {
28440		switch k {
28441		case "targetResourceId":
28442			if v != nil {
28443				var targetResourceID string
28444				err = json.Unmarshal(*v, &targetResourceID)
28445				if err != nil {
28446					return err
28447				}
28448				tp.TargetResourceID = &targetResourceID
28449			}
28450		case "properties":
28451			if v != nil {
28452				var troubleshootingProperties TroubleshootingProperties
28453				err = json.Unmarshal(*v, &troubleshootingProperties)
28454				if err != nil {
28455					return err
28456				}
28457				tp.TroubleshootingProperties = &troubleshootingProperties
28458			}
28459		}
28460	}
28461
28462	return nil
28463}
28464
28465// TroubleshootingProperties storage location provided for troubleshoot.
28466type TroubleshootingProperties struct {
28467	// StorageID - The ID for the storage account to save the troubleshoot result.
28468	StorageID *string `json:"storageId,omitempty"`
28469	// StoragePath - The path to the blob to save the troubleshoot result in.
28470	StoragePath *string `json:"storagePath,omitempty"`
28471}
28472
28473// TroubleshootingRecommendedActions recommended actions based on discovered issues.
28474type TroubleshootingRecommendedActions struct {
28475	// ActionID - ID of the recommended action.
28476	ActionID *string `json:"actionId,omitempty"`
28477	// ActionText - Description of recommended actions.
28478	ActionText *string `json:"actionText,omitempty"`
28479	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
28480	ActionURI *string `json:"actionUri,omitempty"`
28481	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
28482	ActionURIText *string `json:"actionUriText,omitempty"`
28483}
28484
28485// TroubleshootingResult troubleshooting information gained from specified resource.
28486type TroubleshootingResult struct {
28487	autorest.Response `json:"-"`
28488	// StartTime - The start time of the troubleshooting.
28489	StartTime *date.Time `json:"startTime,omitempty"`
28490	// EndTime - The end time of the troubleshooting.
28491	EndTime *date.Time `json:"endTime,omitempty"`
28492	// Code - The result code of the troubleshooting.
28493	Code *string `json:"code,omitempty"`
28494	// Results - Information from troubleshooting.
28495	Results *[]TroubleshootingDetails `json:"results,omitempty"`
28496}
28497
28498// TunnelConnectionHealth virtualNetworkGatewayConnection properties.
28499type TunnelConnectionHealth struct {
28500	// Tunnel - READ-ONLY; Tunnel name.
28501	Tunnel *string `json:"tunnel,omitempty"`
28502	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
28503	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
28504	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection.
28505	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
28506	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection.
28507	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
28508	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
28509	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
28510}
28511
28512// UnprepareNetworkPoliciesRequest details of UnprepareNetworkPolicies for Subnet.
28513type UnprepareNetworkPoliciesRequest struct {
28514	// ServiceName - The name of the service for which subnet is being unprepared for.
28515	ServiceName *string `json:"serviceName,omitempty"`
28516}
28517
28518// Usage describes network resource usage.
28519type Usage struct {
28520	// ID - READ-ONLY; Resource identifier.
28521	ID *string `json:"id,omitempty"`
28522	// Unit - An enum describing the unit of measurement.
28523	Unit *string `json:"unit,omitempty"`
28524	// CurrentValue - The current value of the usage.
28525	CurrentValue *int64 `json:"currentValue,omitempty"`
28526	// Limit - The limit of usage.
28527	Limit *int64 `json:"limit,omitempty"`
28528	// Name - The name of the type of usage.
28529	Name *UsageName `json:"name,omitempty"`
28530}
28531
28532// UsageName the usage names.
28533type UsageName struct {
28534	// Value - A string describing the resource name.
28535	Value *string `json:"value,omitempty"`
28536	// LocalizedValue - A localized string describing the resource name.
28537	LocalizedValue *string `json:"localizedValue,omitempty"`
28538}
28539
28540// UsagesListResult the list usages operation response.
28541type UsagesListResult struct {
28542	autorest.Response `json:"-"`
28543	// Value - The list network resource usages.
28544	Value *[]Usage `json:"value,omitempty"`
28545	// NextLink - URL to get the next set of results.
28546	NextLink *string `json:"nextLink,omitempty"`
28547}
28548
28549// UsagesListResultIterator provides access to a complete listing of Usage values.
28550type UsagesListResultIterator struct {
28551	i    int
28552	page UsagesListResultPage
28553}
28554
28555// NextWithContext advances to the next value.  If there was an error making
28556// the request the iterator does not advance and the error is returned.
28557func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
28558	if tracing.IsEnabled() {
28559		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
28560		defer func() {
28561			sc := -1
28562			if iter.Response().Response.Response != nil {
28563				sc = iter.Response().Response.Response.StatusCode
28564			}
28565			tracing.EndSpan(ctx, sc, err)
28566		}()
28567	}
28568	iter.i++
28569	if iter.i < len(iter.page.Values()) {
28570		return nil
28571	}
28572	err = iter.page.NextWithContext(ctx)
28573	if err != nil {
28574		iter.i--
28575		return err
28576	}
28577	iter.i = 0
28578	return nil
28579}
28580
28581// Next advances to the next value.  If there was an error making
28582// the request the iterator does not advance and the error is returned.
28583// Deprecated: Use NextWithContext() instead.
28584func (iter *UsagesListResultIterator) Next() error {
28585	return iter.NextWithContext(context.Background())
28586}
28587
28588// NotDone returns true if the enumeration should be started or is not yet complete.
28589func (iter UsagesListResultIterator) NotDone() bool {
28590	return iter.page.NotDone() && iter.i < len(iter.page.Values())
28591}
28592
28593// Response returns the raw server response from the last page request.
28594func (iter UsagesListResultIterator) Response() UsagesListResult {
28595	return iter.page.Response()
28596}
28597
28598// Value returns the current value or a zero-initialized value if the
28599// iterator has advanced beyond the end of the collection.
28600func (iter UsagesListResultIterator) Value() Usage {
28601	if !iter.page.NotDone() {
28602		return Usage{}
28603	}
28604	return iter.page.Values()[iter.i]
28605}
28606
28607// Creates a new instance of the UsagesListResultIterator type.
28608func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
28609	return UsagesListResultIterator{page: page}
28610}
28611
28612// IsEmpty returns true if the ListResult contains no values.
28613func (ulr UsagesListResult) IsEmpty() bool {
28614	return ulr.Value == nil || len(*ulr.Value) == 0
28615}
28616
28617// usagesListResultPreparer prepares a request to retrieve the next set of results.
28618// It returns nil if no more results exist.
28619func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
28620	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
28621		return nil, nil
28622	}
28623	return autorest.Prepare((&http.Request{}).WithContext(ctx),
28624		autorest.AsJSON(),
28625		autorest.AsGet(),
28626		autorest.WithBaseURL(to.String(ulr.NextLink)))
28627}
28628
28629// UsagesListResultPage contains a page of Usage values.
28630type UsagesListResultPage struct {
28631	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
28632	ulr UsagesListResult
28633}
28634
28635// NextWithContext advances to the next page of values.  If there was an error making
28636// the request the page does not advance and the error is returned.
28637func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
28638	if tracing.IsEnabled() {
28639		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
28640		defer func() {
28641			sc := -1
28642			if page.Response().Response.Response != nil {
28643				sc = page.Response().Response.Response.StatusCode
28644			}
28645			tracing.EndSpan(ctx, sc, err)
28646		}()
28647	}
28648	next, err := page.fn(ctx, page.ulr)
28649	if err != nil {
28650		return err
28651	}
28652	page.ulr = next
28653	return nil
28654}
28655
28656// Next advances to the next page of values.  If there was an error making
28657// the request the page does not advance and the error is returned.
28658// Deprecated: Use NextWithContext() instead.
28659func (page *UsagesListResultPage) Next() error {
28660	return page.NextWithContext(context.Background())
28661}
28662
28663// NotDone returns true if the page enumeration should be started or is not yet complete.
28664func (page UsagesListResultPage) NotDone() bool {
28665	return !page.ulr.IsEmpty()
28666}
28667
28668// Response returns the raw server response from the last page request.
28669func (page UsagesListResultPage) Response() UsagesListResult {
28670	return page.ulr
28671}
28672
28673// Values returns the slice of values for the current page or nil if there are no values.
28674func (page UsagesListResultPage) Values() []Usage {
28675	if page.ulr.IsEmpty() {
28676		return nil
28677	}
28678	return *page.ulr.Value
28679}
28680
28681// Creates a new instance of the UsagesListResultPage type.
28682func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
28683	return UsagesListResultPage{fn: getNextPage}
28684}
28685
28686// VerificationIPFlowParameters parameters that define the IP flow to be verified.
28687type VerificationIPFlowParameters struct {
28688	// TargetResourceID - The ID of the target resource to perform next-hop on.
28689	TargetResourceID *string `json:"targetResourceId,omitempty"`
28690	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
28691	Direction Direction `json:"direction,omitempty"`
28692	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
28693	Protocol IPFlowProtocol `json:"protocol,omitempty"`
28694	// 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.
28695	LocalPort *string `json:"localPort,omitempty"`
28696	// 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.
28697	RemotePort *string `json:"remotePort,omitempty"`
28698	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
28699	LocalIPAddress *string `json:"localIPAddress,omitempty"`
28700	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
28701	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
28702	// 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).
28703	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
28704}
28705
28706// VerificationIPFlowResult results of IP flow verification on the target resource.
28707type VerificationIPFlowResult struct {
28708	autorest.Response `json:"-"`
28709	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
28710	Access Access `json:"access,omitempty"`
28711	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
28712	RuleName *string `json:"ruleName,omitempty"`
28713}
28714
28715// VirtualHub virtualHub Resource.
28716type VirtualHub struct {
28717	autorest.Response `json:"-"`
28718	// VirtualHubProperties - Properties of the virtual hub.
28719	*VirtualHubProperties `json:"properties,omitempty"`
28720	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
28721	Etag *string `json:"etag,omitempty"`
28722	// ID - Resource ID.
28723	ID *string `json:"id,omitempty"`
28724	// Name - READ-ONLY; Resource name.
28725	Name *string `json:"name,omitempty"`
28726	// Type - READ-ONLY; Resource type.
28727	Type *string `json:"type,omitempty"`
28728	// Location - Resource location.
28729	Location *string `json:"location,omitempty"`
28730	// Tags - Resource tags.
28731	Tags map[string]*string `json:"tags"`
28732}
28733
28734// MarshalJSON is the custom marshaler for VirtualHub.
28735func (vh VirtualHub) MarshalJSON() ([]byte, error) {
28736	objectMap := make(map[string]interface{})
28737	if vh.VirtualHubProperties != nil {
28738		objectMap["properties"] = vh.VirtualHubProperties
28739	}
28740	if vh.ID != nil {
28741		objectMap["id"] = vh.ID
28742	}
28743	if vh.Location != nil {
28744		objectMap["location"] = vh.Location
28745	}
28746	if vh.Tags != nil {
28747		objectMap["tags"] = vh.Tags
28748	}
28749	return json.Marshal(objectMap)
28750}
28751
28752// UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
28753func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
28754	var m map[string]*json.RawMessage
28755	err := json.Unmarshal(body, &m)
28756	if err != nil {
28757		return err
28758	}
28759	for k, v := range m {
28760		switch k {
28761		case "properties":
28762			if v != nil {
28763				var virtualHubProperties VirtualHubProperties
28764				err = json.Unmarshal(*v, &virtualHubProperties)
28765				if err != nil {
28766					return err
28767				}
28768				vh.VirtualHubProperties = &virtualHubProperties
28769			}
28770		case "etag":
28771			if v != nil {
28772				var etag string
28773				err = json.Unmarshal(*v, &etag)
28774				if err != nil {
28775					return err
28776				}
28777				vh.Etag = &etag
28778			}
28779		case "id":
28780			if v != nil {
28781				var ID string
28782				err = json.Unmarshal(*v, &ID)
28783				if err != nil {
28784					return err
28785				}
28786				vh.ID = &ID
28787			}
28788		case "name":
28789			if v != nil {
28790				var name string
28791				err = json.Unmarshal(*v, &name)
28792				if err != nil {
28793					return err
28794				}
28795				vh.Name = &name
28796			}
28797		case "type":
28798			if v != nil {
28799				var typeVar string
28800				err = json.Unmarshal(*v, &typeVar)
28801				if err != nil {
28802					return err
28803				}
28804				vh.Type = &typeVar
28805			}
28806		case "location":
28807			if v != nil {
28808				var location string
28809				err = json.Unmarshal(*v, &location)
28810				if err != nil {
28811					return err
28812				}
28813				vh.Location = &location
28814			}
28815		case "tags":
28816			if v != nil {
28817				var tags map[string]*string
28818				err = json.Unmarshal(*v, &tags)
28819				if err != nil {
28820					return err
28821				}
28822				vh.Tags = tags
28823			}
28824		}
28825	}
28826
28827	return nil
28828}
28829
28830// VirtualHubID virtual Hub identifier.
28831type VirtualHubID struct {
28832	// 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.
28833	ID *string `json:"id,omitempty"`
28834}
28835
28836// VirtualHubProperties parameters for VirtualHub.
28837type VirtualHubProperties struct {
28838	// VirtualWan - The VirtualWAN to which the VirtualHub belongs.
28839	VirtualWan *SubResource `json:"virtualWan,omitempty"`
28840	// VpnGateway - The VpnGateway associated with this VirtualHub.
28841	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
28842	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub.
28843	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
28844	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub.
28845	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
28846	// VirtualNetworkConnections - List of all vnet connections with this VirtualHub.
28847	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
28848	// AddressPrefix - Address-prefix for this VirtualHub.
28849	AddressPrefix *string `json:"addressPrefix,omitempty"`
28850	// RouteTable - The routeTable associated with this virtual hub.
28851	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
28852	// ProvisioningState - The provisioning state of the virtual hub resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
28853	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
28854}
28855
28856// VirtualHubRoute virtualHub route.
28857type VirtualHubRoute struct {
28858	// AddressPrefixes - List of all addressPrefixes.
28859	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
28860	// NextHopIPAddress - NextHop ip address.
28861	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
28862}
28863
28864// VirtualHubRouteTable virtualHub route table.
28865type VirtualHubRouteTable struct {
28866	// Routes - List of all routes.
28867	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
28868}
28869
28870// VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
28871// long-running operation.
28872type VirtualHubsCreateOrUpdateFuture struct {
28873	azure.Future
28874}
28875
28876// Result returns the result of the asynchronous operation.
28877// If the operation has not completed it will return an error.
28878func (future *VirtualHubsCreateOrUpdateFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
28879	var done bool
28880	done, err = future.DoneWithContext(context.Background(), client)
28881	if err != nil {
28882		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
28883		return
28884	}
28885	if !done {
28886		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
28887		return
28888	}
28889	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28890	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
28891		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
28892		if err != nil {
28893			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
28894		}
28895	}
28896	return
28897}
28898
28899// VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
28900// operation.
28901type VirtualHubsDeleteFuture struct {
28902	azure.Future
28903}
28904
28905// Result returns the result of the asynchronous operation.
28906// If the operation has not completed it will return an error.
28907func (future *VirtualHubsDeleteFuture) Result(client VirtualHubsClient) (ar autorest.Response, err error) {
28908	var done bool
28909	done, err = future.DoneWithContext(context.Background(), client)
28910	if err != nil {
28911		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
28912		return
28913	}
28914	if !done {
28915		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
28916		return
28917	}
28918	ar.Response = future.Response()
28919	return
28920}
28921
28922// VirtualHubsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
28923// operation.
28924type VirtualHubsUpdateTagsFuture struct {
28925	azure.Future
28926}
28927
28928// Result returns the result of the asynchronous operation.
28929// If the operation has not completed it will return an error.
28930func (future *VirtualHubsUpdateTagsFuture) Result(client VirtualHubsClient) (vh VirtualHub, err error) {
28931	var done bool
28932	done, err = future.DoneWithContext(context.Background(), client)
28933	if err != nil {
28934		err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
28935		return
28936	}
28937	if !done {
28938		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsUpdateTagsFuture")
28939		return
28940	}
28941	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
28942	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
28943		vh, err = client.UpdateTagsResponder(vh.Response.Response)
28944		if err != nil {
28945			err = autorest.NewErrorWithError(err, "network.VirtualHubsUpdateTagsFuture", "Result", vh.Response.Response, "Failure responding to request")
28946		}
28947	}
28948	return
28949}
28950
28951// VirtualNetwork virtual Network resource.
28952type VirtualNetwork struct {
28953	autorest.Response `json:"-"`
28954	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
28955	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
28956	// Etag - A unique read-only string that changes whenever the resource is updated.
28957	Etag *string `json:"etag,omitempty"`
28958	// ID - Resource ID.
28959	ID *string `json:"id,omitempty"`
28960	// Name - READ-ONLY; Resource name.
28961	Name *string `json:"name,omitempty"`
28962	// Type - READ-ONLY; Resource type.
28963	Type *string `json:"type,omitempty"`
28964	// Location - Resource location.
28965	Location *string `json:"location,omitempty"`
28966	// Tags - Resource tags.
28967	Tags map[string]*string `json:"tags"`
28968}
28969
28970// MarshalJSON is the custom marshaler for VirtualNetwork.
28971func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
28972	objectMap := make(map[string]interface{})
28973	if vn.VirtualNetworkPropertiesFormat != nil {
28974		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
28975	}
28976	if vn.Etag != nil {
28977		objectMap["etag"] = vn.Etag
28978	}
28979	if vn.ID != nil {
28980		objectMap["id"] = vn.ID
28981	}
28982	if vn.Location != nil {
28983		objectMap["location"] = vn.Location
28984	}
28985	if vn.Tags != nil {
28986		objectMap["tags"] = vn.Tags
28987	}
28988	return json.Marshal(objectMap)
28989}
28990
28991// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
28992func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
28993	var m map[string]*json.RawMessage
28994	err := json.Unmarshal(body, &m)
28995	if err != nil {
28996		return err
28997	}
28998	for k, v := range m {
28999		switch k {
29000		case "properties":
29001			if v != nil {
29002				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
29003				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
29004				if err != nil {
29005					return err
29006				}
29007				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
29008			}
29009		case "etag":
29010			if v != nil {
29011				var etag string
29012				err = json.Unmarshal(*v, &etag)
29013				if err != nil {
29014					return err
29015				}
29016				vn.Etag = &etag
29017			}
29018		case "id":
29019			if v != nil {
29020				var ID string
29021				err = json.Unmarshal(*v, &ID)
29022				if err != nil {
29023					return err
29024				}
29025				vn.ID = &ID
29026			}
29027		case "name":
29028			if v != nil {
29029				var name string
29030				err = json.Unmarshal(*v, &name)
29031				if err != nil {
29032					return err
29033				}
29034				vn.Name = &name
29035			}
29036		case "type":
29037			if v != nil {
29038				var typeVar string
29039				err = json.Unmarshal(*v, &typeVar)
29040				if err != nil {
29041					return err
29042				}
29043				vn.Type = &typeVar
29044			}
29045		case "location":
29046			if v != nil {
29047				var location string
29048				err = json.Unmarshal(*v, &location)
29049				if err != nil {
29050					return err
29051				}
29052				vn.Location = &location
29053			}
29054		case "tags":
29055			if v != nil {
29056				var tags map[string]*string
29057				err = json.Unmarshal(*v, &tags)
29058				if err != nil {
29059					return err
29060				}
29061				vn.Tags = tags
29062			}
29063		}
29064	}
29065
29066	return nil
29067}
29068
29069// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
29070// resource.
29071type VirtualNetworkConnectionGatewayReference struct {
29072	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
29073	ID *string `json:"id,omitempty"`
29074}
29075
29076// VirtualNetworkGateway a common class for general resource information.
29077type VirtualNetworkGateway struct {
29078	autorest.Response `json:"-"`
29079	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
29080	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
29081	// Etag - A unique read-only string that changes whenever the resource is updated.
29082	Etag *string `json:"etag,omitempty"`
29083	// ID - Resource ID.
29084	ID *string `json:"id,omitempty"`
29085	// Name - READ-ONLY; Resource name.
29086	Name *string `json:"name,omitempty"`
29087	// Type - READ-ONLY; Resource type.
29088	Type *string `json:"type,omitempty"`
29089	// Location - Resource location.
29090	Location *string `json:"location,omitempty"`
29091	// Tags - Resource tags.
29092	Tags map[string]*string `json:"tags"`
29093}
29094
29095// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
29096func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
29097	objectMap := make(map[string]interface{})
29098	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
29099		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
29100	}
29101	if vng.Etag != nil {
29102		objectMap["etag"] = vng.Etag
29103	}
29104	if vng.ID != nil {
29105		objectMap["id"] = vng.ID
29106	}
29107	if vng.Location != nil {
29108		objectMap["location"] = vng.Location
29109	}
29110	if vng.Tags != nil {
29111		objectMap["tags"] = vng.Tags
29112	}
29113	return json.Marshal(objectMap)
29114}
29115
29116// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
29117func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
29118	var m map[string]*json.RawMessage
29119	err := json.Unmarshal(body, &m)
29120	if err != nil {
29121		return err
29122	}
29123	for k, v := range m {
29124		switch k {
29125		case "properties":
29126			if v != nil {
29127				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
29128				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
29129				if err != nil {
29130					return err
29131				}
29132				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
29133			}
29134		case "etag":
29135			if v != nil {
29136				var etag string
29137				err = json.Unmarshal(*v, &etag)
29138				if err != nil {
29139					return err
29140				}
29141				vng.Etag = &etag
29142			}
29143		case "id":
29144			if v != nil {
29145				var ID string
29146				err = json.Unmarshal(*v, &ID)
29147				if err != nil {
29148					return err
29149				}
29150				vng.ID = &ID
29151			}
29152		case "name":
29153			if v != nil {
29154				var name string
29155				err = json.Unmarshal(*v, &name)
29156				if err != nil {
29157					return err
29158				}
29159				vng.Name = &name
29160			}
29161		case "type":
29162			if v != nil {
29163				var typeVar string
29164				err = json.Unmarshal(*v, &typeVar)
29165				if err != nil {
29166					return err
29167				}
29168				vng.Type = &typeVar
29169			}
29170		case "location":
29171			if v != nil {
29172				var location string
29173				err = json.Unmarshal(*v, &location)
29174				if err != nil {
29175					return err
29176				}
29177				vng.Location = &location
29178			}
29179		case "tags":
29180			if v != nil {
29181				var tags map[string]*string
29182				err = json.Unmarshal(*v, &tags)
29183				if err != nil {
29184					return err
29185				}
29186				vng.Tags = tags
29187			}
29188		}
29189	}
29190
29191	return nil
29192}
29193
29194// VirtualNetworkGatewayConnection a common class for general resource information.
29195type VirtualNetworkGatewayConnection struct {
29196	autorest.Response `json:"-"`
29197	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
29198	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
29199	// Etag - A unique read-only string that changes whenever the resource is updated.
29200	Etag *string `json:"etag,omitempty"`
29201	// ID - Resource ID.
29202	ID *string `json:"id,omitempty"`
29203	// Name - READ-ONLY; Resource name.
29204	Name *string `json:"name,omitempty"`
29205	// Type - READ-ONLY; Resource type.
29206	Type *string `json:"type,omitempty"`
29207	// Location - Resource location.
29208	Location *string `json:"location,omitempty"`
29209	// Tags - Resource tags.
29210	Tags map[string]*string `json:"tags"`
29211}
29212
29213// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
29214func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
29215	objectMap := make(map[string]interface{})
29216	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
29217		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
29218	}
29219	if vngc.Etag != nil {
29220		objectMap["etag"] = vngc.Etag
29221	}
29222	if vngc.ID != nil {
29223		objectMap["id"] = vngc.ID
29224	}
29225	if vngc.Location != nil {
29226		objectMap["location"] = vngc.Location
29227	}
29228	if vngc.Tags != nil {
29229		objectMap["tags"] = vngc.Tags
29230	}
29231	return json.Marshal(objectMap)
29232}
29233
29234// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
29235func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
29236	var m map[string]*json.RawMessage
29237	err := json.Unmarshal(body, &m)
29238	if err != nil {
29239		return err
29240	}
29241	for k, v := range m {
29242		switch k {
29243		case "properties":
29244			if v != nil {
29245				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
29246				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
29247				if err != nil {
29248					return err
29249				}
29250				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
29251			}
29252		case "etag":
29253			if v != nil {
29254				var etag string
29255				err = json.Unmarshal(*v, &etag)
29256				if err != nil {
29257					return err
29258				}
29259				vngc.Etag = &etag
29260			}
29261		case "id":
29262			if v != nil {
29263				var ID string
29264				err = json.Unmarshal(*v, &ID)
29265				if err != nil {
29266					return err
29267				}
29268				vngc.ID = &ID
29269			}
29270		case "name":
29271			if v != nil {
29272				var name string
29273				err = json.Unmarshal(*v, &name)
29274				if err != nil {
29275					return err
29276				}
29277				vngc.Name = &name
29278			}
29279		case "type":
29280			if v != nil {
29281				var typeVar string
29282				err = json.Unmarshal(*v, &typeVar)
29283				if err != nil {
29284					return err
29285				}
29286				vngc.Type = &typeVar
29287			}
29288		case "location":
29289			if v != nil {
29290				var location string
29291				err = json.Unmarshal(*v, &location)
29292				if err != nil {
29293					return err
29294				}
29295				vngc.Location = &location
29296			}
29297		case "tags":
29298			if v != nil {
29299				var tags map[string]*string
29300				err = json.Unmarshal(*v, &tags)
29301				if err != nil {
29302					return err
29303				}
29304				vngc.Tags = tags
29305			}
29306		}
29307	}
29308
29309	return nil
29310}
29311
29312// VirtualNetworkGatewayConnectionListEntity a common class for general resource information.
29313type VirtualNetworkGatewayConnectionListEntity struct {
29314	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
29315	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
29316	// Etag - A unique read-only string that changes whenever the resource is updated.
29317	Etag *string `json:"etag,omitempty"`
29318	// ID - Resource ID.
29319	ID *string `json:"id,omitempty"`
29320	// Name - READ-ONLY; Resource name.
29321	Name *string `json:"name,omitempty"`
29322	// Type - READ-ONLY; Resource type.
29323	Type *string `json:"type,omitempty"`
29324	// Location - Resource location.
29325	Location *string `json:"location,omitempty"`
29326	// Tags - Resource tags.
29327	Tags map[string]*string `json:"tags"`
29328}
29329
29330// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
29331func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
29332	objectMap := make(map[string]interface{})
29333	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
29334		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
29335	}
29336	if vngcle.Etag != nil {
29337		objectMap["etag"] = vngcle.Etag
29338	}
29339	if vngcle.ID != nil {
29340		objectMap["id"] = vngcle.ID
29341	}
29342	if vngcle.Location != nil {
29343		objectMap["location"] = vngcle.Location
29344	}
29345	if vngcle.Tags != nil {
29346		objectMap["tags"] = vngcle.Tags
29347	}
29348	return json.Marshal(objectMap)
29349}
29350
29351// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
29352func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
29353	var m map[string]*json.RawMessage
29354	err := json.Unmarshal(body, &m)
29355	if err != nil {
29356		return err
29357	}
29358	for k, v := range m {
29359		switch k {
29360		case "properties":
29361			if v != nil {
29362				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
29363				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
29364				if err != nil {
29365					return err
29366				}
29367				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
29368			}
29369		case "etag":
29370			if v != nil {
29371				var etag string
29372				err = json.Unmarshal(*v, &etag)
29373				if err != nil {
29374					return err
29375				}
29376				vngcle.Etag = &etag
29377			}
29378		case "id":
29379			if v != nil {
29380				var ID string
29381				err = json.Unmarshal(*v, &ID)
29382				if err != nil {
29383					return err
29384				}
29385				vngcle.ID = &ID
29386			}
29387		case "name":
29388			if v != nil {
29389				var name string
29390				err = json.Unmarshal(*v, &name)
29391				if err != nil {
29392					return err
29393				}
29394				vngcle.Name = &name
29395			}
29396		case "type":
29397			if v != nil {
29398				var typeVar string
29399				err = json.Unmarshal(*v, &typeVar)
29400				if err != nil {
29401					return err
29402				}
29403				vngcle.Type = &typeVar
29404			}
29405		case "location":
29406			if v != nil {
29407				var location string
29408				err = json.Unmarshal(*v, &location)
29409				if err != nil {
29410					return err
29411				}
29412				vngcle.Location = &location
29413			}
29414		case "tags":
29415			if v != nil {
29416				var tags map[string]*string
29417				err = json.Unmarshal(*v, &tags)
29418				if err != nil {
29419					return err
29420				}
29421				vngcle.Tags = tags
29422			}
29423		}
29424	}
29425
29426	return nil
29427}
29428
29429// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties.
29430type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
29431	// AuthorizationKey - The authorizationKey.
29432	AuthorizationKey *string `json:"authorizationKey,omitempty"`
29433	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
29434	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
29435	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
29436	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
29437	// LocalNetworkGateway2 - The reference to local network gateway resource.
29438	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
29439	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
29440	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
29441	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
29442	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
29443	// RoutingWeight - The routing weight.
29444	RoutingWeight *int32 `json:"routingWeight,omitempty"`
29445	// SharedKey - The IPSec shared key.
29446	SharedKey *string `json:"sharedKey,omitempty"`
29447	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
29448	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
29449	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
29450	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
29451	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
29452	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
29453	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
29454	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
29455	// Peer - The reference to peerings resource.
29456	Peer *SubResource `json:"peer,omitempty"`
29457	// EnableBgp - EnableBgp flag.
29458	EnableBgp *bool `json:"enableBgp,omitempty"`
29459	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
29460	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
29461	// IpsecPolicies - The IPSec Policies to be considered by this connection.
29462	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
29463	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
29464	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
29465	// ResourceGUID - The resource GUID property of the virtual network gateway connection resource.
29466	ResourceGUID *string `json:"resourceGuid,omitempty"`
29467	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29468	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29469	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
29470	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
29471}
29472
29473// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
29474// service call.
29475type VirtualNetworkGatewayConnectionListResult struct {
29476	autorest.Response `json:"-"`
29477	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
29478	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
29479	// NextLink - READ-ONLY; The URL to get the next set of results.
29480	NextLink *string `json:"nextLink,omitempty"`
29481}
29482
29483// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
29484// VirtualNetworkGatewayConnection values.
29485type VirtualNetworkGatewayConnectionListResultIterator struct {
29486	i    int
29487	page VirtualNetworkGatewayConnectionListResultPage
29488}
29489
29490// NextWithContext advances to the next value.  If there was an error making
29491// the request the iterator does not advance and the error is returned.
29492func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
29493	if tracing.IsEnabled() {
29494		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
29495		defer func() {
29496			sc := -1
29497			if iter.Response().Response.Response != nil {
29498				sc = iter.Response().Response.Response.StatusCode
29499			}
29500			tracing.EndSpan(ctx, sc, err)
29501		}()
29502	}
29503	iter.i++
29504	if iter.i < len(iter.page.Values()) {
29505		return nil
29506	}
29507	err = iter.page.NextWithContext(ctx)
29508	if err != nil {
29509		iter.i--
29510		return err
29511	}
29512	iter.i = 0
29513	return nil
29514}
29515
29516// Next advances to the next value.  If there was an error making
29517// the request the iterator does not advance and the error is returned.
29518// Deprecated: Use NextWithContext() instead.
29519func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
29520	return iter.NextWithContext(context.Background())
29521}
29522
29523// NotDone returns true if the enumeration should be started or is not yet complete.
29524func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
29525	return iter.page.NotDone() && iter.i < len(iter.page.Values())
29526}
29527
29528// Response returns the raw server response from the last page request.
29529func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
29530	return iter.page.Response()
29531}
29532
29533// Value returns the current value or a zero-initialized value if the
29534// iterator has advanced beyond the end of the collection.
29535func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
29536	if !iter.page.NotDone() {
29537		return VirtualNetworkGatewayConnection{}
29538	}
29539	return iter.page.Values()[iter.i]
29540}
29541
29542// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
29543func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
29544	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
29545}
29546
29547// IsEmpty returns true if the ListResult contains no values.
29548func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
29549	return vngclr.Value == nil || len(*vngclr.Value) == 0
29550}
29551
29552// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
29553// It returns nil if no more results exist.
29554func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
29555	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
29556		return nil, nil
29557	}
29558	return autorest.Prepare((&http.Request{}).WithContext(ctx),
29559		autorest.AsJSON(),
29560		autorest.AsGet(),
29561		autorest.WithBaseURL(to.String(vngclr.NextLink)))
29562}
29563
29564// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
29565type VirtualNetworkGatewayConnectionListResultPage struct {
29566	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
29567	vngclr VirtualNetworkGatewayConnectionListResult
29568}
29569
29570// NextWithContext advances to the next page of values.  If there was an error making
29571// the request the page does not advance and the error is returned.
29572func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
29573	if tracing.IsEnabled() {
29574		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
29575		defer func() {
29576			sc := -1
29577			if page.Response().Response.Response != nil {
29578				sc = page.Response().Response.Response.StatusCode
29579			}
29580			tracing.EndSpan(ctx, sc, err)
29581		}()
29582	}
29583	next, err := page.fn(ctx, page.vngclr)
29584	if err != nil {
29585		return err
29586	}
29587	page.vngclr = next
29588	return nil
29589}
29590
29591// Next advances to the next page of values.  If there was an error making
29592// the request the page does not advance and the error is returned.
29593// Deprecated: Use NextWithContext() instead.
29594func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
29595	return page.NextWithContext(context.Background())
29596}
29597
29598// NotDone returns true if the page enumeration should be started or is not yet complete.
29599func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
29600	return !page.vngclr.IsEmpty()
29601}
29602
29603// Response returns the raw server response from the last page request.
29604func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
29605	return page.vngclr
29606}
29607
29608// Values returns the slice of values for the current page or nil if there are no values.
29609func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
29610	if page.vngclr.IsEmpty() {
29611		return nil
29612	}
29613	return *page.vngclr.Value
29614}
29615
29616// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
29617func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
29618	return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage}
29619}
29620
29621// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties.
29622type VirtualNetworkGatewayConnectionPropertiesFormat struct {
29623	// AuthorizationKey - The authorizationKey.
29624	AuthorizationKey *string `json:"authorizationKey,omitempty"`
29625	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
29626	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
29627	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
29628	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
29629	// LocalNetworkGateway2 - The reference to local network gateway resource.
29630	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
29631	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
29632	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
29633	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
29634	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
29635	// RoutingWeight - The routing weight.
29636	RoutingWeight *int32 `json:"routingWeight,omitempty"`
29637	// SharedKey - The IPSec shared key.
29638	SharedKey *string `json:"sharedKey,omitempty"`
29639	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
29640	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
29641	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
29642	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
29643	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
29644	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
29645	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
29646	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
29647	// Peer - The reference to peerings resource.
29648	Peer *SubResource `json:"peer,omitempty"`
29649	// EnableBgp - EnableBgp flag.
29650	EnableBgp *bool `json:"enableBgp,omitempty"`
29651	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
29652	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
29653	// IpsecPolicies - The IPSec Policies to be considered by this connection.
29654	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
29655	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
29656	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
29657	// ResourceGUID - The resource GUID property of the virtual network gateway connection resource.
29658	ResourceGUID *string `json:"resourceGuid,omitempty"`
29659	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29660	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29661	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
29662	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
29663}
29664
29665// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
29666// results of a long-running operation.
29667type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
29668	azure.Future
29669}
29670
29671// Result returns the result of the asynchronous operation.
29672// If the operation has not completed it will return an error.
29673func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
29674	var done bool
29675	done, err = future.DoneWithContext(context.Background(), client)
29676	if err != nil {
29677		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
29678		return
29679	}
29680	if !done {
29681		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
29682		return
29683	}
29684	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29685	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
29686		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
29687		if err != nil {
29688			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
29689		}
29690	}
29691	return
29692}
29693
29694// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
29695// a long-running operation.
29696type VirtualNetworkGatewayConnectionsDeleteFuture struct {
29697	azure.Future
29698}
29699
29700// Result returns the result of the asynchronous operation.
29701// If the operation has not completed it will return an error.
29702func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
29703	var done bool
29704	done, err = future.DoneWithContext(context.Background(), client)
29705	if err != nil {
29706		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
29707		return
29708	}
29709	if !done {
29710		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
29711		return
29712	}
29713	ar.Response = future.Response()
29714	return
29715}
29716
29717// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
29718// results of a long-running operation.
29719type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
29720	azure.Future
29721}
29722
29723// Result returns the result of the asynchronous operation.
29724// If the operation has not completed it will return an error.
29725func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
29726	var done bool
29727	done, err = future.DoneWithContext(context.Background(), client)
29728	if err != nil {
29729		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
29730		return
29731	}
29732	if !done {
29733		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
29734		return
29735	}
29736	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29737	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
29738		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
29739		if err != nil {
29740			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
29741		}
29742	}
29743	return
29744}
29745
29746// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
29747// results of a long-running operation.
29748type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
29749	azure.Future
29750}
29751
29752// Result returns the result of the asynchronous operation.
29753// If the operation has not completed it will return an error.
29754func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
29755	var done bool
29756	done, err = future.DoneWithContext(context.Background(), client)
29757	if err != nil {
29758		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
29759		return
29760	}
29761	if !done {
29762		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
29763		return
29764	}
29765	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29766	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
29767		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
29768		if err != nil {
29769			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
29770		}
29771	}
29772	return
29773}
29774
29775// VirtualNetworkGatewayConnectionsStartPacketCaptureFuture an abstraction for monitoring and retrieving
29776// the results of a long-running operation.
29777type VirtualNetworkGatewayConnectionsStartPacketCaptureFuture struct {
29778	azure.Future
29779}
29780
29781// Result returns the result of the asynchronous operation.
29782// If the operation has not completed it will return an error.
29783func (future *VirtualNetworkGatewayConnectionsStartPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
29784	var done bool
29785	done, err = future.DoneWithContext(context.Background(), client)
29786	if err != nil {
29787		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
29788		return
29789	}
29790	if !done {
29791		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture")
29792		return
29793	}
29794	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29795	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
29796		s, err = client.StartPacketCaptureResponder(s.Response.Response)
29797		if err != nil {
29798			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
29799		}
29800	}
29801	return
29802}
29803
29804// VirtualNetworkGatewayConnectionsStopPacketCaptureFuture an abstraction for monitoring and retrieving the
29805// results of a long-running operation.
29806type VirtualNetworkGatewayConnectionsStopPacketCaptureFuture struct {
29807	azure.Future
29808}
29809
29810// Result returns the result of the asynchronous operation.
29811// If the operation has not completed it will return an error.
29812func (future *VirtualNetworkGatewayConnectionsStopPacketCaptureFuture) Result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
29813	var done bool
29814	done, err = future.DoneWithContext(context.Background(), client)
29815	if err != nil {
29816		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
29817		return
29818	}
29819	if !done {
29820		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture")
29821		return
29822	}
29823	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29824	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
29825		s, err = client.StopPacketCaptureResponder(s.Response.Response)
29826		if err != nil {
29827			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
29828		}
29829	}
29830	return
29831}
29832
29833// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
29834// results of a long-running operation.
29835type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
29836	azure.Future
29837}
29838
29839// Result returns the result of the asynchronous operation.
29840// If the operation has not completed it will return an error.
29841func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
29842	var done bool
29843	done, err = future.DoneWithContext(context.Background(), client)
29844	if err != nil {
29845		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
29846		return
29847	}
29848	if !done {
29849		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
29850		return
29851	}
29852	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
29853	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
29854		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
29855		if err != nil {
29856			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
29857		}
29858	}
29859	return
29860}
29861
29862// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway.
29863type VirtualNetworkGatewayIPConfiguration struct {
29864	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
29865	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
29866	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
29867	Name *string `json:"name,omitempty"`
29868	// Etag - A unique read-only string that changes whenever the resource is updated.
29869	Etag *string `json:"etag,omitempty"`
29870	// ID - Resource ID.
29871	ID *string `json:"id,omitempty"`
29872}
29873
29874// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
29875func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
29876	objectMap := make(map[string]interface{})
29877	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
29878		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
29879	}
29880	if vngic.Name != nil {
29881		objectMap["name"] = vngic.Name
29882	}
29883	if vngic.Etag != nil {
29884		objectMap["etag"] = vngic.Etag
29885	}
29886	if vngic.ID != nil {
29887		objectMap["id"] = vngic.ID
29888	}
29889	return json.Marshal(objectMap)
29890}
29891
29892// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
29893func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
29894	var m map[string]*json.RawMessage
29895	err := json.Unmarshal(body, &m)
29896	if err != nil {
29897		return err
29898	}
29899	for k, v := range m {
29900		switch k {
29901		case "properties":
29902			if v != nil {
29903				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
29904				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
29905				if err != nil {
29906					return err
29907				}
29908				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
29909			}
29910		case "name":
29911			if v != nil {
29912				var name string
29913				err = json.Unmarshal(*v, &name)
29914				if err != nil {
29915					return err
29916				}
29917				vngic.Name = &name
29918			}
29919		case "etag":
29920			if v != nil {
29921				var etag string
29922				err = json.Unmarshal(*v, &etag)
29923				if err != nil {
29924					return err
29925				}
29926				vngic.Etag = &etag
29927			}
29928		case "id":
29929			if v != nil {
29930				var ID string
29931				err = json.Unmarshal(*v, &ID)
29932				if err != nil {
29933					return err
29934				}
29935				vngic.ID = &ID
29936			}
29937		}
29938	}
29939
29940	return nil
29941}
29942
29943// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration.
29944type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
29945	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
29946	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
29947	// Subnet - The reference of the subnet resource.
29948	Subnet *SubResource `json:"subnet,omitempty"`
29949	// PublicIPAddress - The reference of the public IP resource.
29950	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
29951	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
29952	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
29953}
29954
29955// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
29956// service call.
29957type VirtualNetworkGatewayListConnectionsResult struct {
29958	autorest.Response `json:"-"`
29959	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
29960	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
29961	// NextLink - READ-ONLY; The URL to get the next set of results.
29962	NextLink *string `json:"nextLink,omitempty"`
29963}
29964
29965// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
29966// VirtualNetworkGatewayConnectionListEntity values.
29967type VirtualNetworkGatewayListConnectionsResultIterator struct {
29968	i    int
29969	page VirtualNetworkGatewayListConnectionsResultPage
29970}
29971
29972// NextWithContext advances to the next value.  If there was an error making
29973// the request the iterator does not advance and the error is returned.
29974func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
29975	if tracing.IsEnabled() {
29976		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
29977		defer func() {
29978			sc := -1
29979			if iter.Response().Response.Response != nil {
29980				sc = iter.Response().Response.Response.StatusCode
29981			}
29982			tracing.EndSpan(ctx, sc, err)
29983		}()
29984	}
29985	iter.i++
29986	if iter.i < len(iter.page.Values()) {
29987		return nil
29988	}
29989	err = iter.page.NextWithContext(ctx)
29990	if err != nil {
29991		iter.i--
29992		return err
29993	}
29994	iter.i = 0
29995	return nil
29996}
29997
29998// Next advances to the next value.  If there was an error making
29999// the request the iterator does not advance and the error is returned.
30000// Deprecated: Use NextWithContext() instead.
30001func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
30002	return iter.NextWithContext(context.Background())
30003}
30004
30005// NotDone returns true if the enumeration should be started or is not yet complete.
30006func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
30007	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30008}
30009
30010// Response returns the raw server response from the last page request.
30011func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
30012	return iter.page.Response()
30013}
30014
30015// Value returns the current value or a zero-initialized value if the
30016// iterator has advanced beyond the end of the collection.
30017func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
30018	if !iter.page.NotDone() {
30019		return VirtualNetworkGatewayConnectionListEntity{}
30020	}
30021	return iter.page.Values()[iter.i]
30022}
30023
30024// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
30025func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
30026	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
30027}
30028
30029// IsEmpty returns true if the ListResult contains no values.
30030func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
30031	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
30032}
30033
30034// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
30035// It returns nil if no more results exist.
30036func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
30037	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
30038		return nil, nil
30039	}
30040	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30041		autorest.AsJSON(),
30042		autorest.AsGet(),
30043		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
30044}
30045
30046// VirtualNetworkGatewayListConnectionsResultPage contains a page of
30047// VirtualNetworkGatewayConnectionListEntity values.
30048type VirtualNetworkGatewayListConnectionsResultPage struct {
30049	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
30050	vnglcr VirtualNetworkGatewayListConnectionsResult
30051}
30052
30053// NextWithContext advances to the next page of values.  If there was an error making
30054// the request the page does not advance and the error is returned.
30055func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
30056	if tracing.IsEnabled() {
30057		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
30058		defer func() {
30059			sc := -1
30060			if page.Response().Response.Response != nil {
30061				sc = page.Response().Response.Response.StatusCode
30062			}
30063			tracing.EndSpan(ctx, sc, err)
30064		}()
30065	}
30066	next, err := page.fn(ctx, page.vnglcr)
30067	if err != nil {
30068		return err
30069	}
30070	page.vnglcr = next
30071	return nil
30072}
30073
30074// Next advances to the next page of values.  If there was an error making
30075// the request the page does not advance and the error is returned.
30076// Deprecated: Use NextWithContext() instead.
30077func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
30078	return page.NextWithContext(context.Background())
30079}
30080
30081// NotDone returns true if the page enumeration should be started or is not yet complete.
30082func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
30083	return !page.vnglcr.IsEmpty()
30084}
30085
30086// Response returns the raw server response from the last page request.
30087func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
30088	return page.vnglcr
30089}
30090
30091// Values returns the slice of values for the current page or nil if there are no values.
30092func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
30093	if page.vnglcr.IsEmpty() {
30094		return nil
30095	}
30096	return *page.vnglcr.Value
30097}
30098
30099// Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
30100func NewVirtualNetworkGatewayListConnectionsResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
30101	return VirtualNetworkGatewayListConnectionsResultPage{fn: getNextPage}
30102}
30103
30104// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
30105type VirtualNetworkGatewayListResult struct {
30106	autorest.Response `json:"-"`
30107	// Value - A list of VirtualNetworkGateway resources that exists in a resource group.
30108	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
30109	// NextLink - READ-ONLY; The URL to get the next set of results.
30110	NextLink *string `json:"nextLink,omitempty"`
30111}
30112
30113// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
30114// values.
30115type VirtualNetworkGatewayListResultIterator struct {
30116	i    int
30117	page VirtualNetworkGatewayListResultPage
30118}
30119
30120// NextWithContext advances to the next value.  If there was an error making
30121// the request the iterator does not advance and the error is returned.
30122func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
30123	if tracing.IsEnabled() {
30124		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
30125		defer func() {
30126			sc := -1
30127			if iter.Response().Response.Response != nil {
30128				sc = iter.Response().Response.Response.StatusCode
30129			}
30130			tracing.EndSpan(ctx, sc, err)
30131		}()
30132	}
30133	iter.i++
30134	if iter.i < len(iter.page.Values()) {
30135		return nil
30136	}
30137	err = iter.page.NextWithContext(ctx)
30138	if err != nil {
30139		iter.i--
30140		return err
30141	}
30142	iter.i = 0
30143	return nil
30144}
30145
30146// Next advances to the next value.  If there was an error making
30147// the request the iterator does not advance and the error is returned.
30148// Deprecated: Use NextWithContext() instead.
30149func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
30150	return iter.NextWithContext(context.Background())
30151}
30152
30153// NotDone returns true if the enumeration should be started or is not yet complete.
30154func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
30155	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30156}
30157
30158// Response returns the raw server response from the last page request.
30159func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
30160	return iter.page.Response()
30161}
30162
30163// Value returns the current value or a zero-initialized value if the
30164// iterator has advanced beyond the end of the collection.
30165func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
30166	if !iter.page.NotDone() {
30167		return VirtualNetworkGateway{}
30168	}
30169	return iter.page.Values()[iter.i]
30170}
30171
30172// Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
30173func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
30174	return VirtualNetworkGatewayListResultIterator{page: page}
30175}
30176
30177// IsEmpty returns true if the ListResult contains no values.
30178func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
30179	return vnglr.Value == nil || len(*vnglr.Value) == 0
30180}
30181
30182// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
30183// It returns nil if no more results exist.
30184func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
30185	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
30186		return nil, nil
30187	}
30188	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30189		autorest.AsJSON(),
30190		autorest.AsGet(),
30191		autorest.WithBaseURL(to.String(vnglr.NextLink)))
30192}
30193
30194// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
30195type VirtualNetworkGatewayListResultPage struct {
30196	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
30197	vnglr VirtualNetworkGatewayListResult
30198}
30199
30200// NextWithContext advances to the next page of values.  If there was an error making
30201// the request the page does not advance and the error is returned.
30202func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
30203	if tracing.IsEnabled() {
30204		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
30205		defer func() {
30206			sc := -1
30207			if page.Response().Response.Response != nil {
30208				sc = page.Response().Response.Response.StatusCode
30209			}
30210			tracing.EndSpan(ctx, sc, err)
30211		}()
30212	}
30213	next, err := page.fn(ctx, page.vnglr)
30214	if err != nil {
30215		return err
30216	}
30217	page.vnglr = next
30218	return nil
30219}
30220
30221// Next advances to the next page of values.  If there was an error making
30222// the request the page does not advance and the error is returned.
30223// Deprecated: Use NextWithContext() instead.
30224func (page *VirtualNetworkGatewayListResultPage) Next() error {
30225	return page.NextWithContext(context.Background())
30226}
30227
30228// NotDone returns true if the page enumeration should be started or is not yet complete.
30229func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
30230	return !page.vnglr.IsEmpty()
30231}
30232
30233// Response returns the raw server response from the last page request.
30234func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
30235	return page.vnglr
30236}
30237
30238// Values returns the slice of values for the current page or nil if there are no values.
30239func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
30240	if page.vnglr.IsEmpty() {
30241		return nil
30242	}
30243	return *page.vnglr.Value
30244}
30245
30246// Creates a new instance of the VirtualNetworkGatewayListResultPage type.
30247func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
30248	return VirtualNetworkGatewayListResultPage{fn: getNextPage}
30249}
30250
30251// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties.
30252type VirtualNetworkGatewayPropertiesFormat struct {
30253	// IPConfigurations - IP configurations for virtual network gateway.
30254	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
30255	// GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
30256	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
30257	// VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased'
30258	VpnType VpnType `json:"vpnType,omitempty"`
30259	// VpnGatewayGeneration - The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN. Possible values include: 'VpnGatewayGenerationNone', 'VpnGatewayGenerationGeneration1', 'VpnGatewayGenerationGeneration2'
30260	VpnGatewayGeneration VpnGatewayGeneration `json:"vpnGatewayGeneration,omitempty"`
30261	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
30262	EnableBgp *bool `json:"enableBgp,omitempty"`
30263	// ActiveActive - ActiveActive flag.
30264	ActiveActive *bool `json:"activeActive,omitempty"`
30265	// GatewayDefaultSite - The reference of the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.
30266	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
30267	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
30268	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
30269	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
30270	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
30271	// BgpSettings - Virtual network gateway's BGP speaker settings.
30272	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
30273	// CustomRoutes - The reference of the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.
30274	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
30275	// ResourceGUID - The resource GUID property of the virtual network gateway resource.
30276	ResourceGUID *string `json:"resourceGuid,omitempty"`
30277	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
30278	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
30279}
30280
30281// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
30282// long-running operation.
30283type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
30284	azure.Future
30285}
30286
30287// Result returns the result of the asynchronous operation.
30288// If the operation has not completed it will return an error.
30289func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
30290	var done bool
30291	done, err = future.DoneWithContext(context.Background(), client)
30292	if err != nil {
30293		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
30294		return
30295	}
30296	if !done {
30297		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
30298		return
30299	}
30300	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30301	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
30302		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
30303		if err != nil {
30304			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
30305		}
30306	}
30307	return
30308}
30309
30310// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
30311// long-running operation.
30312type VirtualNetworkGatewaysDeleteFuture struct {
30313	azure.Future
30314}
30315
30316// Result returns the result of the asynchronous operation.
30317// If the operation has not completed it will return an error.
30318func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
30319	var done bool
30320	done, err = future.DoneWithContext(context.Background(), client)
30321	if err != nil {
30322		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
30323		return
30324	}
30325	if !done {
30326		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
30327		return
30328	}
30329	ar.Response = future.Response()
30330	return
30331}
30332
30333// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
30334// results of a long-running operation.
30335type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
30336	azure.Future
30337}
30338
30339// Result returns the result of the asynchronous operation.
30340// If the operation has not completed it will return an error.
30341func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30342	var done bool
30343	done, err = future.DoneWithContext(context.Background(), client)
30344	if err != nil {
30345		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
30346		return
30347	}
30348	if !done {
30349		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
30350		return
30351	}
30352	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30353	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30354		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
30355		if err != nil {
30356			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
30357		}
30358	}
30359	return
30360}
30361
30362// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
30363// of a long-running operation.
30364type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
30365	azure.Future
30366}
30367
30368// Result returns the result of the asynchronous operation.
30369// If the operation has not completed it will return an error.
30370func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30371	var done bool
30372	done, err = future.DoneWithContext(context.Background(), client)
30373	if err != nil {
30374		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
30375		return
30376	}
30377	if !done {
30378		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
30379		return
30380	}
30381	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30382	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30383		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
30384		if err != nil {
30385			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
30386		}
30387	}
30388	return
30389}
30390
30391// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
30392// of a long-running operation.
30393type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
30394	azure.Future
30395}
30396
30397// Result returns the result of the asynchronous operation.
30398// If the operation has not completed it will return an error.
30399func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
30400	var done bool
30401	done, err = future.DoneWithContext(context.Background(), client)
30402	if err != nil {
30403		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
30404		return
30405	}
30406	if !done {
30407		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
30408		return
30409	}
30410	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30411	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
30412		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
30413		if err != nil {
30414			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
30415		}
30416	}
30417	return
30418}
30419
30420// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
30421// a long-running operation.
30422type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
30423	azure.Future
30424}
30425
30426// Result returns the result of the asynchronous operation.
30427// If the operation has not completed it will return an error.
30428func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
30429	var done bool
30430	done, err = future.DoneWithContext(context.Background(), client)
30431	if err != nil {
30432		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
30433		return
30434	}
30435	if !done {
30436		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
30437		return
30438	}
30439	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30440	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
30441		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
30442		if err != nil {
30443			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
30444		}
30445	}
30446	return
30447}
30448
30449// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
30450// a long-running operation.
30451type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
30452	azure.Future
30453}
30454
30455// Result returns the result of the asynchronous operation.
30456// If the operation has not completed it will return an error.
30457func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
30458	var done bool
30459	done, err = future.DoneWithContext(context.Background(), client)
30460	if err != nil {
30461		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
30462		return
30463	}
30464	if !done {
30465		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
30466		return
30467	}
30468	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30469	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
30470		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
30471		if err != nil {
30472			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
30473		}
30474	}
30475	return
30476}
30477
30478// VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture an abstraction for monitoring and retrieving
30479// the results of a long-running operation.
30480type VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture struct {
30481	azure.Future
30482}
30483
30484// Result returns the result of the asynchronous operation.
30485// If the operation has not completed it will return an error.
30486func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) Result(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
30487	var done bool
30488	done, err = future.DoneWithContext(context.Background(), client)
30489	if err != nil {
30490		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
30491		return
30492	}
30493	if !done {
30494		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
30495		return
30496	}
30497	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30498	if vcchdlr.Response.Response, err = future.GetResult(sender); err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
30499		vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
30500		if err != nil {
30501			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
30502		}
30503	}
30504	return
30505}
30506
30507// VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
30508// results of a long-running operation.
30509type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
30510	azure.Future
30511}
30512
30513// Result returns the result of the asynchronous operation.
30514// If the operation has not completed it will return an error.
30515func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
30516	var done bool
30517	done, err = future.DoneWithContext(context.Background(), client)
30518	if err != nil {
30519		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
30520		return
30521	}
30522	if !done {
30523		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
30524		return
30525	}
30526	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30527	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
30528		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
30529		if err != nil {
30530			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
30531		}
30532	}
30533	return
30534}
30535
30536// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
30537// results of a long-running operation.
30538type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
30539	azure.Future
30540}
30541
30542// Result returns the result of the asynchronous operation.
30543// If the operation has not completed it will return an error.
30544func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30545	var done bool
30546	done, err = future.DoneWithContext(context.Background(), client)
30547	if err != nil {
30548		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
30549		return
30550	}
30551	if !done {
30552		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
30553		return
30554	}
30555	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30556	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30557		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
30558		if err != nil {
30559			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
30560		}
30561	}
30562	return
30563}
30564
30565// VirtualNetworkGatewaySku virtualNetworkGatewaySku details.
30566type VirtualNetworkGatewaySku struct {
30567	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw4', 'VirtualNetworkGatewaySkuNameVpnGw5', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameVpnGw4AZ', 'VirtualNetworkGatewaySkuNameVpnGw5AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
30568	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
30569	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw4', 'VirtualNetworkGatewaySkuTierVpnGw5', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierVpnGw4AZ', 'VirtualNetworkGatewaySkuTierVpnGw5AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
30570	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
30571	// Capacity - The capacity.
30572	Capacity *int32 `json:"capacity,omitempty"`
30573}
30574
30575// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
30576// long-running operation.
30577type VirtualNetworkGatewaysResetFuture struct {
30578	azure.Future
30579}
30580
30581// Result returns the result of the asynchronous operation.
30582// If the operation has not completed it will return an error.
30583func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
30584	var done bool
30585	done, err = future.DoneWithContext(context.Background(), client)
30586	if err != nil {
30587		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
30588		return
30589	}
30590	if !done {
30591		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
30592		return
30593	}
30594	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30595	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
30596		vng, err = client.ResetResponder(vng.Response.Response)
30597		if err != nil {
30598			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
30599		}
30600	}
30601	return
30602}
30603
30604// VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
30605// results of a long-running operation.
30606type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
30607	azure.Future
30608}
30609
30610// Result returns the result of the asynchronous operation.
30611// If the operation has not completed it will return an error.
30612func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
30613	var done bool
30614	done, err = future.DoneWithContext(context.Background(), client)
30615	if err != nil {
30616		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
30617		return
30618	}
30619	if !done {
30620		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
30621		return
30622	}
30623	ar.Response = future.Response()
30624	return
30625}
30626
30627// VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
30628// results of a long-running operation.
30629type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
30630	azure.Future
30631}
30632
30633// Result returns the result of the asynchronous operation.
30634// If the operation has not completed it will return an error.
30635func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) Result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
30636	var done bool
30637	done, err = future.DoneWithContext(context.Background(), client)
30638	if err != nil {
30639		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
30640		return
30641	}
30642	if !done {
30643		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
30644		return
30645	}
30646	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30647	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
30648		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
30649		if err != nil {
30650			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
30651		}
30652	}
30653	return
30654}
30655
30656// VirtualNetworkGatewaysStartPacketCaptureFuture an abstraction for monitoring and retrieving the results
30657// of a long-running operation.
30658type VirtualNetworkGatewaysStartPacketCaptureFuture struct {
30659	azure.Future
30660}
30661
30662// Result returns the result of the asynchronous operation.
30663// If the operation has not completed it will return an error.
30664func (future *VirtualNetworkGatewaysStartPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30665	var done bool
30666	done, err = future.DoneWithContext(context.Background(), client)
30667	if err != nil {
30668		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
30669		return
30670	}
30671	if !done {
30672		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStartPacketCaptureFuture")
30673		return
30674	}
30675	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30676	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30677		s, err = client.StartPacketCaptureResponder(s.Response.Response)
30678		if err != nil {
30679			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
30680		}
30681	}
30682	return
30683}
30684
30685// VirtualNetworkGatewaysStopPacketCaptureFuture an abstraction for monitoring and retrieving the results
30686// of a long-running operation.
30687type VirtualNetworkGatewaysStopPacketCaptureFuture struct {
30688	azure.Future
30689}
30690
30691// Result returns the result of the asynchronous operation.
30692// If the operation has not completed it will return an error.
30693func (future *VirtualNetworkGatewaysStopPacketCaptureFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
30694	var done bool
30695	done, err = future.DoneWithContext(context.Background(), client)
30696	if err != nil {
30697		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
30698		return
30699	}
30700	if !done {
30701		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStopPacketCaptureFuture")
30702		return
30703	}
30704	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30705	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
30706		s, err = client.StopPacketCaptureResponder(s.Response.Response)
30707		if err != nil {
30708			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
30709		}
30710	}
30711	return
30712}
30713
30714// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
30715// long-running operation.
30716type VirtualNetworkGatewaysUpdateTagsFuture struct {
30717	azure.Future
30718}
30719
30720// Result returns the result of the asynchronous operation.
30721// If the operation has not completed it will return an error.
30722func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
30723	var done bool
30724	done, err = future.DoneWithContext(context.Background(), client)
30725	if err != nil {
30726		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
30727		return
30728	}
30729	if !done {
30730		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
30731		return
30732	}
30733	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
30734	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
30735		vng, err = client.UpdateTagsResponder(vng.Response.Response)
30736		if err != nil {
30737			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
30738		}
30739	}
30740	return
30741}
30742
30743// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
30744type VirtualNetworkListResult struct {
30745	autorest.Response `json:"-"`
30746	// Value - A list of VirtualNetwork resources in a resource group.
30747	Value *[]VirtualNetwork `json:"value,omitempty"`
30748	// NextLink - The URL to get the next set of results.
30749	NextLink *string `json:"nextLink,omitempty"`
30750}
30751
30752// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
30753type VirtualNetworkListResultIterator struct {
30754	i    int
30755	page VirtualNetworkListResultPage
30756}
30757
30758// NextWithContext advances to the next value.  If there was an error making
30759// the request the iterator does not advance and the error is returned.
30760func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
30761	if tracing.IsEnabled() {
30762		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
30763		defer func() {
30764			sc := -1
30765			if iter.Response().Response.Response != nil {
30766				sc = iter.Response().Response.Response.StatusCode
30767			}
30768			tracing.EndSpan(ctx, sc, err)
30769		}()
30770	}
30771	iter.i++
30772	if iter.i < len(iter.page.Values()) {
30773		return nil
30774	}
30775	err = iter.page.NextWithContext(ctx)
30776	if err != nil {
30777		iter.i--
30778		return err
30779	}
30780	iter.i = 0
30781	return nil
30782}
30783
30784// Next advances to the next value.  If there was an error making
30785// the request the iterator does not advance and the error is returned.
30786// Deprecated: Use NextWithContext() instead.
30787func (iter *VirtualNetworkListResultIterator) Next() error {
30788	return iter.NextWithContext(context.Background())
30789}
30790
30791// NotDone returns true if the enumeration should be started or is not yet complete.
30792func (iter VirtualNetworkListResultIterator) NotDone() bool {
30793	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30794}
30795
30796// Response returns the raw server response from the last page request.
30797func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
30798	return iter.page.Response()
30799}
30800
30801// Value returns the current value or a zero-initialized value if the
30802// iterator has advanced beyond the end of the collection.
30803func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
30804	if !iter.page.NotDone() {
30805		return VirtualNetwork{}
30806	}
30807	return iter.page.Values()[iter.i]
30808}
30809
30810// Creates a new instance of the VirtualNetworkListResultIterator type.
30811func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
30812	return VirtualNetworkListResultIterator{page: page}
30813}
30814
30815// IsEmpty returns true if the ListResult contains no values.
30816func (vnlr VirtualNetworkListResult) IsEmpty() bool {
30817	return vnlr.Value == nil || len(*vnlr.Value) == 0
30818}
30819
30820// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
30821// It returns nil if no more results exist.
30822func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
30823	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
30824		return nil, nil
30825	}
30826	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30827		autorest.AsJSON(),
30828		autorest.AsGet(),
30829		autorest.WithBaseURL(to.String(vnlr.NextLink)))
30830}
30831
30832// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
30833type VirtualNetworkListResultPage struct {
30834	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
30835	vnlr VirtualNetworkListResult
30836}
30837
30838// NextWithContext advances to the next page of values.  If there was an error making
30839// the request the page does not advance and the error is returned.
30840func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
30841	if tracing.IsEnabled() {
30842		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
30843		defer func() {
30844			sc := -1
30845			if page.Response().Response.Response != nil {
30846				sc = page.Response().Response.Response.StatusCode
30847			}
30848			tracing.EndSpan(ctx, sc, err)
30849		}()
30850	}
30851	next, err := page.fn(ctx, page.vnlr)
30852	if err != nil {
30853		return err
30854	}
30855	page.vnlr = next
30856	return nil
30857}
30858
30859// Next advances to the next page of values.  If there was an error making
30860// the request the page does not advance and the error is returned.
30861// Deprecated: Use NextWithContext() instead.
30862func (page *VirtualNetworkListResultPage) Next() error {
30863	return page.NextWithContext(context.Background())
30864}
30865
30866// NotDone returns true if the page enumeration should be started or is not yet complete.
30867func (page VirtualNetworkListResultPage) NotDone() bool {
30868	return !page.vnlr.IsEmpty()
30869}
30870
30871// Response returns the raw server response from the last page request.
30872func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
30873	return page.vnlr
30874}
30875
30876// Values returns the slice of values for the current page or nil if there are no values.
30877func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
30878	if page.vnlr.IsEmpty() {
30879		return nil
30880	}
30881	return *page.vnlr.Value
30882}
30883
30884// Creates a new instance of the VirtualNetworkListResultPage type.
30885func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
30886	return VirtualNetworkListResultPage{fn: getNextPage}
30887}
30888
30889// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
30890type VirtualNetworkListUsageResult struct {
30891	autorest.Response `json:"-"`
30892	// Value - READ-ONLY; VirtualNetwork usage stats.
30893	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
30894	// NextLink - The URL to get the next set of results.
30895	NextLink *string `json:"nextLink,omitempty"`
30896}
30897
30898// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
30899// values.
30900type VirtualNetworkListUsageResultIterator struct {
30901	i    int
30902	page VirtualNetworkListUsageResultPage
30903}
30904
30905// NextWithContext advances to the next value.  If there was an error making
30906// the request the iterator does not advance and the error is returned.
30907func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
30908	if tracing.IsEnabled() {
30909		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
30910		defer func() {
30911			sc := -1
30912			if iter.Response().Response.Response != nil {
30913				sc = iter.Response().Response.Response.StatusCode
30914			}
30915			tracing.EndSpan(ctx, sc, err)
30916		}()
30917	}
30918	iter.i++
30919	if iter.i < len(iter.page.Values()) {
30920		return nil
30921	}
30922	err = iter.page.NextWithContext(ctx)
30923	if err != nil {
30924		iter.i--
30925		return err
30926	}
30927	iter.i = 0
30928	return nil
30929}
30930
30931// Next advances to the next value.  If there was an error making
30932// the request the iterator does not advance and the error is returned.
30933// Deprecated: Use NextWithContext() instead.
30934func (iter *VirtualNetworkListUsageResultIterator) Next() error {
30935	return iter.NextWithContext(context.Background())
30936}
30937
30938// NotDone returns true if the enumeration should be started or is not yet complete.
30939func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
30940	return iter.page.NotDone() && iter.i < len(iter.page.Values())
30941}
30942
30943// Response returns the raw server response from the last page request.
30944func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
30945	return iter.page.Response()
30946}
30947
30948// Value returns the current value or a zero-initialized value if the
30949// iterator has advanced beyond the end of the collection.
30950func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
30951	if !iter.page.NotDone() {
30952		return VirtualNetworkUsage{}
30953	}
30954	return iter.page.Values()[iter.i]
30955}
30956
30957// Creates a new instance of the VirtualNetworkListUsageResultIterator type.
30958func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
30959	return VirtualNetworkListUsageResultIterator{page: page}
30960}
30961
30962// IsEmpty returns true if the ListResult contains no values.
30963func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
30964	return vnlur.Value == nil || len(*vnlur.Value) == 0
30965}
30966
30967// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
30968// It returns nil if no more results exist.
30969func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
30970	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
30971		return nil, nil
30972	}
30973	return autorest.Prepare((&http.Request{}).WithContext(ctx),
30974		autorest.AsJSON(),
30975		autorest.AsGet(),
30976		autorest.WithBaseURL(to.String(vnlur.NextLink)))
30977}
30978
30979// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
30980type VirtualNetworkListUsageResultPage struct {
30981	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
30982	vnlur VirtualNetworkListUsageResult
30983}
30984
30985// NextWithContext advances to the next page of values.  If there was an error making
30986// the request the page does not advance and the error is returned.
30987func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
30988	if tracing.IsEnabled() {
30989		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
30990		defer func() {
30991			sc := -1
30992			if page.Response().Response.Response != nil {
30993				sc = page.Response().Response.Response.StatusCode
30994			}
30995			tracing.EndSpan(ctx, sc, err)
30996		}()
30997	}
30998	next, err := page.fn(ctx, page.vnlur)
30999	if err != nil {
31000		return err
31001	}
31002	page.vnlur = next
31003	return nil
31004}
31005
31006// Next advances to the next page of values.  If there was an error making
31007// the request the page does not advance and the error is returned.
31008// Deprecated: Use NextWithContext() instead.
31009func (page *VirtualNetworkListUsageResultPage) Next() error {
31010	return page.NextWithContext(context.Background())
31011}
31012
31013// NotDone returns true if the page enumeration should be started or is not yet complete.
31014func (page VirtualNetworkListUsageResultPage) NotDone() bool {
31015	return !page.vnlur.IsEmpty()
31016}
31017
31018// Response returns the raw server response from the last page request.
31019func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
31020	return page.vnlur
31021}
31022
31023// Values returns the slice of values for the current page or nil if there are no values.
31024func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
31025	if page.vnlur.IsEmpty() {
31026		return nil
31027	}
31028	return *page.vnlur.Value
31029}
31030
31031// Creates a new instance of the VirtualNetworkListUsageResultPage type.
31032func NewVirtualNetworkListUsageResultPage(getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
31033	return VirtualNetworkListUsageResultPage{fn: getNextPage}
31034}
31035
31036// VirtualNetworkPeering peerings in a virtual network resource.
31037type VirtualNetworkPeering struct {
31038	autorest.Response `json:"-"`
31039	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
31040	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
31041	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
31042	Name *string `json:"name,omitempty"`
31043	// Etag - A unique read-only string that changes whenever the resource is updated.
31044	Etag *string `json:"etag,omitempty"`
31045	// ID - Resource ID.
31046	ID *string `json:"id,omitempty"`
31047}
31048
31049// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
31050func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
31051	objectMap := make(map[string]interface{})
31052	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
31053		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
31054	}
31055	if vnp.Name != nil {
31056		objectMap["name"] = vnp.Name
31057	}
31058	if vnp.Etag != nil {
31059		objectMap["etag"] = vnp.Etag
31060	}
31061	if vnp.ID != nil {
31062		objectMap["id"] = vnp.ID
31063	}
31064	return json.Marshal(objectMap)
31065}
31066
31067// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
31068func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
31069	var m map[string]*json.RawMessage
31070	err := json.Unmarshal(body, &m)
31071	if err != nil {
31072		return err
31073	}
31074	for k, v := range m {
31075		switch k {
31076		case "properties":
31077			if v != nil {
31078				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
31079				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
31080				if err != nil {
31081					return err
31082				}
31083				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
31084			}
31085		case "name":
31086			if v != nil {
31087				var name string
31088				err = json.Unmarshal(*v, &name)
31089				if err != nil {
31090					return err
31091				}
31092				vnp.Name = &name
31093			}
31094		case "etag":
31095			if v != nil {
31096				var etag string
31097				err = json.Unmarshal(*v, &etag)
31098				if err != nil {
31099					return err
31100				}
31101				vnp.Etag = &etag
31102			}
31103		case "id":
31104			if v != nil {
31105				var ID string
31106				err = json.Unmarshal(*v, &ID)
31107				if err != nil {
31108					return err
31109				}
31110				vnp.ID = &ID
31111			}
31112		}
31113	}
31114
31115	return nil
31116}
31117
31118// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
31119// belong to a virtual network.
31120type VirtualNetworkPeeringListResult struct {
31121	autorest.Response `json:"-"`
31122	// Value - The peerings in a virtual network.
31123	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
31124	// NextLink - The URL to get the next set of results.
31125	NextLink *string `json:"nextLink,omitempty"`
31126}
31127
31128// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
31129// values.
31130type VirtualNetworkPeeringListResultIterator struct {
31131	i    int
31132	page VirtualNetworkPeeringListResultPage
31133}
31134
31135// NextWithContext advances to the next value.  If there was an error making
31136// the request the iterator does not advance and the error is returned.
31137func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
31138	if tracing.IsEnabled() {
31139		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
31140		defer func() {
31141			sc := -1
31142			if iter.Response().Response.Response != nil {
31143				sc = iter.Response().Response.Response.StatusCode
31144			}
31145			tracing.EndSpan(ctx, sc, err)
31146		}()
31147	}
31148	iter.i++
31149	if iter.i < len(iter.page.Values()) {
31150		return nil
31151	}
31152	err = iter.page.NextWithContext(ctx)
31153	if err != nil {
31154		iter.i--
31155		return err
31156	}
31157	iter.i = 0
31158	return nil
31159}
31160
31161// Next advances to the next value.  If there was an error making
31162// the request the iterator does not advance and the error is returned.
31163// Deprecated: Use NextWithContext() instead.
31164func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
31165	return iter.NextWithContext(context.Background())
31166}
31167
31168// NotDone returns true if the enumeration should be started or is not yet complete.
31169func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
31170	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31171}
31172
31173// Response returns the raw server response from the last page request.
31174func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
31175	return iter.page.Response()
31176}
31177
31178// Value returns the current value or a zero-initialized value if the
31179// iterator has advanced beyond the end of the collection.
31180func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
31181	if !iter.page.NotDone() {
31182		return VirtualNetworkPeering{}
31183	}
31184	return iter.page.Values()[iter.i]
31185}
31186
31187// Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
31188func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
31189	return VirtualNetworkPeeringListResultIterator{page: page}
31190}
31191
31192// IsEmpty returns true if the ListResult contains no values.
31193func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
31194	return vnplr.Value == nil || len(*vnplr.Value) == 0
31195}
31196
31197// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
31198// It returns nil if no more results exist.
31199func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
31200	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
31201		return nil, nil
31202	}
31203	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31204		autorest.AsJSON(),
31205		autorest.AsGet(),
31206		autorest.WithBaseURL(to.String(vnplr.NextLink)))
31207}
31208
31209// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
31210type VirtualNetworkPeeringListResultPage struct {
31211	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
31212	vnplr VirtualNetworkPeeringListResult
31213}
31214
31215// NextWithContext advances to the next page of values.  If there was an error making
31216// the request the page does not advance and the error is returned.
31217func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
31218	if tracing.IsEnabled() {
31219		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
31220		defer func() {
31221			sc := -1
31222			if page.Response().Response.Response != nil {
31223				sc = page.Response().Response.Response.StatusCode
31224			}
31225			tracing.EndSpan(ctx, sc, err)
31226		}()
31227	}
31228	next, err := page.fn(ctx, page.vnplr)
31229	if err != nil {
31230		return err
31231	}
31232	page.vnplr = next
31233	return nil
31234}
31235
31236// Next advances to the next page of values.  If there was an error making
31237// the request the page does not advance and the error is returned.
31238// Deprecated: Use NextWithContext() instead.
31239func (page *VirtualNetworkPeeringListResultPage) Next() error {
31240	return page.NextWithContext(context.Background())
31241}
31242
31243// NotDone returns true if the page enumeration should be started or is not yet complete.
31244func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
31245	return !page.vnplr.IsEmpty()
31246}
31247
31248// Response returns the raw server response from the last page request.
31249func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
31250	return page.vnplr
31251}
31252
31253// Values returns the slice of values for the current page or nil if there are no values.
31254func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
31255	if page.vnplr.IsEmpty() {
31256		return nil
31257	}
31258	return *page.vnplr.Value
31259}
31260
31261// Creates a new instance of the VirtualNetworkPeeringListResultPage type.
31262func NewVirtualNetworkPeeringListResultPage(getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
31263	return VirtualNetworkPeeringListResultPage{fn: getNextPage}
31264}
31265
31266// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
31267type VirtualNetworkPeeringPropertiesFormat struct {
31268	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
31269	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
31270	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
31271	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
31272	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
31273	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
31274	// 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.
31275	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
31276	// RemoteVirtualNetwork - The reference of 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).
31277	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
31278	// RemoteAddressSpace - The reference of the remote virtual network address space.
31279	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
31280	// PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
31281	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
31282	// ProvisioningState - The provisioning state of the virtual network peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31283	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31284}
31285
31286// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31287// long-running operation.
31288type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
31289	azure.Future
31290}
31291
31292// Result returns the result of the asynchronous operation.
31293// If the operation has not completed it will return an error.
31294func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
31295	var done bool
31296	done, err = future.DoneWithContext(context.Background(), client)
31297	if err != nil {
31298		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31299		return
31300	}
31301	if !done {
31302		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
31303		return
31304	}
31305	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31306	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
31307		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
31308		if err != nil {
31309			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
31310		}
31311	}
31312	return
31313}
31314
31315// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
31316// long-running operation.
31317type VirtualNetworkPeeringsDeleteFuture struct {
31318	azure.Future
31319}
31320
31321// Result returns the result of the asynchronous operation.
31322// If the operation has not completed it will return an error.
31323func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
31324	var done bool
31325	done, err = future.DoneWithContext(context.Background(), client)
31326	if err != nil {
31327		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
31328		return
31329	}
31330	if !done {
31331		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
31332		return
31333	}
31334	ar.Response = future.Response()
31335	return
31336}
31337
31338// VirtualNetworkPropertiesFormat properties of the virtual network.
31339type VirtualNetworkPropertiesFormat struct {
31340	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
31341	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
31342	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
31343	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
31344	// Subnets - A list of subnets in a Virtual Network.
31345	Subnets *[]Subnet `json:"subnets,omitempty"`
31346	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
31347	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
31348	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
31349	ResourceGUID *string `json:"resourceGuid,omitempty"`
31350	// ProvisioningState - The provisioning state of the virtual network resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31351	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31352	// 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.
31353	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
31354	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
31355	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
31356	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
31357	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
31358}
31359
31360// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31361// long-running operation.
31362type VirtualNetworksCreateOrUpdateFuture struct {
31363	azure.Future
31364}
31365
31366// Result returns the result of the asynchronous operation.
31367// If the operation has not completed it will return an error.
31368func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
31369	var done bool
31370	done, err = future.DoneWithContext(context.Background(), client)
31371	if err != nil {
31372		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31373		return
31374	}
31375	if !done {
31376		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
31377		return
31378	}
31379	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31380	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
31381		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
31382		if err != nil {
31383			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
31384		}
31385	}
31386	return
31387}
31388
31389// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
31390// operation.
31391type VirtualNetworksDeleteFuture struct {
31392	azure.Future
31393}
31394
31395// Result returns the result of the asynchronous operation.
31396// If the operation has not completed it will return an error.
31397func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
31398	var done bool
31399	done, err = future.DoneWithContext(context.Background(), client)
31400	if err != nil {
31401		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
31402		return
31403	}
31404	if !done {
31405		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
31406		return
31407	}
31408	ar.Response = future.Response()
31409	return
31410}
31411
31412// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
31413// long-running operation.
31414type VirtualNetworksUpdateTagsFuture struct {
31415	azure.Future
31416}
31417
31418// Result returns the result of the asynchronous operation.
31419// If the operation has not completed it will return an error.
31420func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
31421	var done bool
31422	done, err = future.DoneWithContext(context.Background(), client)
31423	if err != nil {
31424		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
31425		return
31426	}
31427	if !done {
31428		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
31429		return
31430	}
31431	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31432	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
31433		vn, err = client.UpdateTagsResponder(vn.Response.Response)
31434		if err != nil {
31435			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
31436		}
31437	}
31438	return
31439}
31440
31441// VirtualNetworkTap virtual Network Tap resource.
31442type VirtualNetworkTap struct {
31443	autorest.Response `json:"-"`
31444	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
31445	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
31446	// Etag - A unique read-only string that changes whenever the resource is updated.
31447	Etag *string `json:"etag,omitempty"`
31448	// ID - Resource ID.
31449	ID *string `json:"id,omitempty"`
31450	// Name - READ-ONLY; Resource name.
31451	Name *string `json:"name,omitempty"`
31452	// Type - READ-ONLY; Resource type.
31453	Type *string `json:"type,omitempty"`
31454	// Location - Resource location.
31455	Location *string `json:"location,omitempty"`
31456	// Tags - Resource tags.
31457	Tags map[string]*string `json:"tags"`
31458}
31459
31460// MarshalJSON is the custom marshaler for VirtualNetworkTap.
31461func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
31462	objectMap := make(map[string]interface{})
31463	if vnt.VirtualNetworkTapPropertiesFormat != nil {
31464		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
31465	}
31466	if vnt.Etag != nil {
31467		objectMap["etag"] = vnt.Etag
31468	}
31469	if vnt.ID != nil {
31470		objectMap["id"] = vnt.ID
31471	}
31472	if vnt.Location != nil {
31473		objectMap["location"] = vnt.Location
31474	}
31475	if vnt.Tags != nil {
31476		objectMap["tags"] = vnt.Tags
31477	}
31478	return json.Marshal(objectMap)
31479}
31480
31481// UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
31482func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
31483	var m map[string]*json.RawMessage
31484	err := json.Unmarshal(body, &m)
31485	if err != nil {
31486		return err
31487	}
31488	for k, v := range m {
31489		switch k {
31490		case "properties":
31491			if v != nil {
31492				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
31493				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
31494				if err != nil {
31495					return err
31496				}
31497				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
31498			}
31499		case "etag":
31500			if v != nil {
31501				var etag string
31502				err = json.Unmarshal(*v, &etag)
31503				if err != nil {
31504					return err
31505				}
31506				vnt.Etag = &etag
31507			}
31508		case "id":
31509			if v != nil {
31510				var ID string
31511				err = json.Unmarshal(*v, &ID)
31512				if err != nil {
31513					return err
31514				}
31515				vnt.ID = &ID
31516			}
31517		case "name":
31518			if v != nil {
31519				var name string
31520				err = json.Unmarshal(*v, &name)
31521				if err != nil {
31522					return err
31523				}
31524				vnt.Name = &name
31525			}
31526		case "type":
31527			if v != nil {
31528				var typeVar string
31529				err = json.Unmarshal(*v, &typeVar)
31530				if err != nil {
31531					return err
31532				}
31533				vnt.Type = &typeVar
31534			}
31535		case "location":
31536			if v != nil {
31537				var location string
31538				err = json.Unmarshal(*v, &location)
31539				if err != nil {
31540					return err
31541				}
31542				vnt.Location = &location
31543			}
31544		case "tags":
31545			if v != nil {
31546				var tags map[string]*string
31547				err = json.Unmarshal(*v, &tags)
31548				if err != nil {
31549					return err
31550				}
31551				vnt.Tags = tags
31552			}
31553		}
31554	}
31555
31556	return nil
31557}
31558
31559// VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
31560type VirtualNetworkTapListResult struct {
31561	autorest.Response `json:"-"`
31562	// Value - A list of VirtualNetworkTaps in a resource group.
31563	Value *[]VirtualNetworkTap `json:"value,omitempty"`
31564	// NextLink - The URL to get the next set of results.
31565	NextLink *string `json:"nextLink,omitempty"`
31566}
31567
31568// VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
31569type VirtualNetworkTapListResultIterator struct {
31570	i    int
31571	page VirtualNetworkTapListResultPage
31572}
31573
31574// NextWithContext advances to the next value.  If there was an error making
31575// the request the iterator does not advance and the error is returned.
31576func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
31577	if tracing.IsEnabled() {
31578		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
31579		defer func() {
31580			sc := -1
31581			if iter.Response().Response.Response != nil {
31582				sc = iter.Response().Response.Response.StatusCode
31583			}
31584			tracing.EndSpan(ctx, sc, err)
31585		}()
31586	}
31587	iter.i++
31588	if iter.i < len(iter.page.Values()) {
31589		return nil
31590	}
31591	err = iter.page.NextWithContext(ctx)
31592	if err != nil {
31593		iter.i--
31594		return err
31595	}
31596	iter.i = 0
31597	return nil
31598}
31599
31600// Next advances to the next value.  If there was an error making
31601// the request the iterator does not advance and the error is returned.
31602// Deprecated: Use NextWithContext() instead.
31603func (iter *VirtualNetworkTapListResultIterator) Next() error {
31604	return iter.NextWithContext(context.Background())
31605}
31606
31607// NotDone returns true if the enumeration should be started or is not yet complete.
31608func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
31609	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31610}
31611
31612// Response returns the raw server response from the last page request.
31613func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
31614	return iter.page.Response()
31615}
31616
31617// Value returns the current value or a zero-initialized value if the
31618// iterator has advanced beyond the end of the collection.
31619func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
31620	if !iter.page.NotDone() {
31621		return VirtualNetworkTap{}
31622	}
31623	return iter.page.Values()[iter.i]
31624}
31625
31626// Creates a new instance of the VirtualNetworkTapListResultIterator type.
31627func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
31628	return VirtualNetworkTapListResultIterator{page: page}
31629}
31630
31631// IsEmpty returns true if the ListResult contains no values.
31632func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
31633	return vntlr.Value == nil || len(*vntlr.Value) == 0
31634}
31635
31636// virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
31637// It returns nil if no more results exist.
31638func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
31639	if vntlr.NextLink == nil || len(to.String(vntlr.NextLink)) < 1 {
31640		return nil, nil
31641	}
31642	return autorest.Prepare((&http.Request{}).WithContext(ctx),
31643		autorest.AsJSON(),
31644		autorest.AsGet(),
31645		autorest.WithBaseURL(to.String(vntlr.NextLink)))
31646}
31647
31648// VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
31649type VirtualNetworkTapListResultPage struct {
31650	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
31651	vntlr VirtualNetworkTapListResult
31652}
31653
31654// NextWithContext advances to the next page of values.  If there was an error making
31655// the request the page does not advance and the error is returned.
31656func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
31657	if tracing.IsEnabled() {
31658		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
31659		defer func() {
31660			sc := -1
31661			if page.Response().Response.Response != nil {
31662				sc = page.Response().Response.Response.StatusCode
31663			}
31664			tracing.EndSpan(ctx, sc, err)
31665		}()
31666	}
31667	next, err := page.fn(ctx, page.vntlr)
31668	if err != nil {
31669		return err
31670	}
31671	page.vntlr = next
31672	return nil
31673}
31674
31675// Next advances to the next page of values.  If there was an error making
31676// the request the page does not advance and the error is returned.
31677// Deprecated: Use NextWithContext() instead.
31678func (page *VirtualNetworkTapListResultPage) Next() error {
31679	return page.NextWithContext(context.Background())
31680}
31681
31682// NotDone returns true if the page enumeration should be started or is not yet complete.
31683func (page VirtualNetworkTapListResultPage) NotDone() bool {
31684	return !page.vntlr.IsEmpty()
31685}
31686
31687// Response returns the raw server response from the last page request.
31688func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
31689	return page.vntlr
31690}
31691
31692// Values returns the slice of values for the current page or nil if there are no values.
31693func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
31694	if page.vntlr.IsEmpty() {
31695		return nil
31696	}
31697	return *page.vntlr.Value
31698}
31699
31700// Creates a new instance of the VirtualNetworkTapListResultPage type.
31701func NewVirtualNetworkTapListResultPage(getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
31702	return VirtualNetworkTapListResultPage{fn: getNextPage}
31703}
31704
31705// VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
31706type VirtualNetworkTapPropertiesFormat struct {
31707	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
31708	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
31709	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network tap resource.
31710	ResourceGUID *string `json:"resourceGuid,omitempty"`
31711	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
31712	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
31713	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap.
31714	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
31715	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap.
31716	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
31717	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
31718	DestinationPort *int32 `json:"destinationPort,omitempty"`
31719}
31720
31721// VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
31722// long-running operation.
31723type VirtualNetworkTapsCreateOrUpdateFuture 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 *VirtualNetworkTapsCreateOrUpdateFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
31730	var done bool
31731	done, err = future.DoneWithContext(context.Background(), client)
31732	if err != nil {
31733		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
31734		return
31735	}
31736	if !done {
31737		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
31738		return
31739	}
31740	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31741	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
31742		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
31743		if err != nil {
31744			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
31745		}
31746	}
31747	return
31748}
31749
31750// VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
31751// long-running operation.
31752type VirtualNetworkTapsDeleteFuture 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 *VirtualNetworkTapsDeleteFuture) Result(client VirtualNetworkTapsClient) (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.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
31763		return
31764	}
31765	if !done {
31766		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
31767		return
31768	}
31769	ar.Response = future.Response()
31770	return
31771}
31772
31773// VirtualNetworkTapsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
31774// long-running operation.
31775type VirtualNetworkTapsUpdateTagsFuture struct {
31776	azure.Future
31777}
31778
31779// Result returns the result of the asynchronous operation.
31780// If the operation has not completed it will return an error.
31781func (future *VirtualNetworkTapsUpdateTagsFuture) Result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
31782	var done bool
31783	done, err = future.DoneWithContext(context.Background(), client)
31784	if err != nil {
31785		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
31786		return
31787	}
31788	if !done {
31789		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsUpdateTagsFuture")
31790		return
31791	}
31792	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
31793	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
31794		vnt, err = client.UpdateTagsResponder(vnt.Response.Response)
31795		if err != nil {
31796			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsUpdateTagsFuture", "Result", vnt.Response.Response, "Failure responding to request")
31797		}
31798	}
31799	return
31800}
31801
31802// VirtualNetworkUsage usage details for subnet.
31803type VirtualNetworkUsage struct {
31804	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
31805	CurrentValue *float64 `json:"currentValue,omitempty"`
31806	// ID - READ-ONLY; Subnet identifier.
31807	ID *string `json:"id,omitempty"`
31808	// Limit - READ-ONLY; Indicates the size of the subnet.
31809	Limit *float64 `json:"limit,omitempty"`
31810	// Name - READ-ONLY; The name containing common and localized value for usage.
31811	Name *VirtualNetworkUsageName `json:"name,omitempty"`
31812	// Unit - READ-ONLY; Usage units. Returns 'Count'.
31813	Unit *string `json:"unit,omitempty"`
31814}
31815
31816// VirtualNetworkUsageName usage strings container.
31817type VirtualNetworkUsageName struct {
31818	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
31819	LocalizedValue *string `json:"localizedValue,omitempty"`
31820	// Value - READ-ONLY; Subnet size and usage string.
31821	Value *string `json:"value,omitempty"`
31822}
31823
31824// VirtualRouter virtualRouter Resource.
31825type VirtualRouter struct {
31826	autorest.Response `json:"-"`
31827	// VirtualRouterPropertiesFormat - Properties of the Virtual Router.
31828	*VirtualRouterPropertiesFormat `json:"properties,omitempty"`
31829	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
31830	Etag *string `json:"etag,omitempty"`
31831	// ID - Resource ID.
31832	ID *string `json:"id,omitempty"`
31833	// Name - READ-ONLY; Resource name.
31834	Name *string `json:"name,omitempty"`
31835	// Type - READ-ONLY; Resource type.
31836	Type *string `json:"type,omitempty"`
31837	// Location - Resource location.
31838	Location *string `json:"location,omitempty"`
31839	// Tags - Resource tags.
31840	Tags map[string]*string `json:"tags"`
31841}
31842
31843// MarshalJSON is the custom marshaler for VirtualRouter.
31844func (vr VirtualRouter) MarshalJSON() ([]byte, error) {
31845	objectMap := make(map[string]interface{})
31846	if vr.VirtualRouterPropertiesFormat != nil {
31847		objectMap["properties"] = vr.VirtualRouterPropertiesFormat
31848	}
31849	if vr.ID != nil {
31850		objectMap["id"] = vr.ID
31851	}
31852	if vr.Location != nil {
31853		objectMap["location"] = vr.Location
31854	}
31855	if vr.Tags != nil {
31856		objectMap["tags"] = vr.Tags
31857	}
31858	return json.Marshal(objectMap)
31859}
31860
31861// UnmarshalJSON is the custom unmarshaler for VirtualRouter struct.
31862func (vr *VirtualRouter) UnmarshalJSON(body []byte) error {
31863	var m map[string]*json.RawMessage
31864	err := json.Unmarshal(body, &m)
31865	if err != nil {
31866		return err
31867	}
31868	for k, v := range m {
31869		switch k {
31870		case "properties":
31871			if v != nil {
31872				var virtualRouterPropertiesFormat VirtualRouterPropertiesFormat
31873				err = json.Unmarshal(*v, &virtualRouterPropertiesFormat)
31874				if err != nil {
31875					return err
31876				}
31877				vr.VirtualRouterPropertiesFormat = &virtualRouterPropertiesFormat
31878			}
31879		case "etag":
31880			if v != nil {
31881				var etag string
31882				err = json.Unmarshal(*v, &etag)
31883				if err != nil {
31884					return err
31885				}
31886				vr.Etag = &etag
31887			}
31888		case "id":
31889			if v != nil {
31890				var ID string
31891				err = json.Unmarshal(*v, &ID)
31892				if err != nil {
31893					return err
31894				}
31895				vr.ID = &ID
31896			}
31897		case "name":
31898			if v != nil {
31899				var name string
31900				err = json.Unmarshal(*v, &name)
31901				if err != nil {
31902					return err
31903				}
31904				vr.Name = &name
31905			}
31906		case "type":
31907			if v != nil {
31908				var typeVar string
31909				err = json.Unmarshal(*v, &typeVar)
31910				if err != nil {
31911					return err
31912				}
31913				vr.Type = &typeVar
31914			}
31915		case "location":
31916			if v != nil {
31917				var location string
31918				err = json.Unmarshal(*v, &location)
31919				if err != nil {
31920					return err
31921				}
31922				vr.Location = &location
31923			}
31924		case "tags":
31925			if v != nil {
31926				var tags map[string]*string
31927				err = json.Unmarshal(*v, &tags)
31928				if err != nil {
31929					return err
31930				}
31931				vr.Tags = tags
31932			}
31933		}
31934	}
31935
31936	return nil
31937}
31938
31939// VirtualRouterListResult response for ListVirtualRouters API service call.
31940type VirtualRouterListResult struct {
31941	autorest.Response `json:"-"`
31942	// Value - List of Virtual Routers.
31943	Value *[]VirtualRouter `json:"value,omitempty"`
31944	// NextLink - URL to get the next set of results.
31945	NextLink *string `json:"nextLink,omitempty"`
31946}
31947
31948// VirtualRouterListResultIterator provides access to a complete listing of VirtualRouter values.
31949type VirtualRouterListResultIterator struct {
31950	i    int
31951	page VirtualRouterListResultPage
31952}
31953
31954// NextWithContext advances to the next value.  If there was an error making
31955// the request the iterator does not advance and the error is returned.
31956func (iter *VirtualRouterListResultIterator) NextWithContext(ctx context.Context) (err error) {
31957	if tracing.IsEnabled() {
31958		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultIterator.NextWithContext")
31959		defer func() {
31960			sc := -1
31961			if iter.Response().Response.Response != nil {
31962				sc = iter.Response().Response.Response.StatusCode
31963			}
31964			tracing.EndSpan(ctx, sc, err)
31965		}()
31966	}
31967	iter.i++
31968	if iter.i < len(iter.page.Values()) {
31969		return nil
31970	}
31971	err = iter.page.NextWithContext(ctx)
31972	if err != nil {
31973		iter.i--
31974		return err
31975	}
31976	iter.i = 0
31977	return nil
31978}
31979
31980// Next advances to the next value.  If there was an error making
31981// the request the iterator does not advance and the error is returned.
31982// Deprecated: Use NextWithContext() instead.
31983func (iter *VirtualRouterListResultIterator) Next() error {
31984	return iter.NextWithContext(context.Background())
31985}
31986
31987// NotDone returns true if the enumeration should be started or is not yet complete.
31988func (iter VirtualRouterListResultIterator) NotDone() bool {
31989	return iter.page.NotDone() && iter.i < len(iter.page.Values())
31990}
31991
31992// Response returns the raw server response from the last page request.
31993func (iter VirtualRouterListResultIterator) Response() VirtualRouterListResult {
31994	return iter.page.Response()
31995}
31996
31997// Value returns the current value or a zero-initialized value if the
31998// iterator has advanced beyond the end of the collection.
31999func (iter VirtualRouterListResultIterator) Value() VirtualRouter {
32000	if !iter.page.NotDone() {
32001		return VirtualRouter{}
32002	}
32003	return iter.page.Values()[iter.i]
32004}
32005
32006// Creates a new instance of the VirtualRouterListResultIterator type.
32007func NewVirtualRouterListResultIterator(page VirtualRouterListResultPage) VirtualRouterListResultIterator {
32008	return VirtualRouterListResultIterator{page: page}
32009}
32010
32011// IsEmpty returns true if the ListResult contains no values.
32012func (vrlr VirtualRouterListResult) IsEmpty() bool {
32013	return vrlr.Value == nil || len(*vrlr.Value) == 0
32014}
32015
32016// virtualRouterListResultPreparer prepares a request to retrieve the next set of results.
32017// It returns nil if no more results exist.
32018func (vrlr VirtualRouterListResult) virtualRouterListResultPreparer(ctx context.Context) (*http.Request, error) {
32019	if vrlr.NextLink == nil || len(to.String(vrlr.NextLink)) < 1 {
32020		return nil, nil
32021	}
32022	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32023		autorest.AsJSON(),
32024		autorest.AsGet(),
32025		autorest.WithBaseURL(to.String(vrlr.NextLink)))
32026}
32027
32028// VirtualRouterListResultPage contains a page of VirtualRouter values.
32029type VirtualRouterListResultPage struct {
32030	fn   func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)
32031	vrlr VirtualRouterListResult
32032}
32033
32034// NextWithContext advances to the next page of values.  If there was an error making
32035// the request the page does not advance and the error is returned.
32036func (page *VirtualRouterListResultPage) NextWithContext(ctx context.Context) (err error) {
32037	if tracing.IsEnabled() {
32038		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultPage.NextWithContext")
32039		defer func() {
32040			sc := -1
32041			if page.Response().Response.Response != nil {
32042				sc = page.Response().Response.Response.StatusCode
32043			}
32044			tracing.EndSpan(ctx, sc, err)
32045		}()
32046	}
32047	next, err := page.fn(ctx, page.vrlr)
32048	if err != nil {
32049		return err
32050	}
32051	page.vrlr = next
32052	return nil
32053}
32054
32055// Next advances to the next page of values.  If there was an error making
32056// the request the page does not advance and the error is returned.
32057// Deprecated: Use NextWithContext() instead.
32058func (page *VirtualRouterListResultPage) Next() error {
32059	return page.NextWithContext(context.Background())
32060}
32061
32062// NotDone returns true if the page enumeration should be started or is not yet complete.
32063func (page VirtualRouterListResultPage) NotDone() bool {
32064	return !page.vrlr.IsEmpty()
32065}
32066
32067// Response returns the raw server response from the last page request.
32068func (page VirtualRouterListResultPage) Response() VirtualRouterListResult {
32069	return page.vrlr
32070}
32071
32072// Values returns the slice of values for the current page or nil if there are no values.
32073func (page VirtualRouterListResultPage) Values() []VirtualRouter {
32074	if page.vrlr.IsEmpty() {
32075		return nil
32076	}
32077	return *page.vrlr.Value
32078}
32079
32080// Creates a new instance of the VirtualRouterListResultPage type.
32081func NewVirtualRouterListResultPage(getNextPage func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)) VirtualRouterListResultPage {
32082	return VirtualRouterListResultPage{fn: getNextPage}
32083}
32084
32085// VirtualRouterPeering virtual Router Peering resource
32086type VirtualRouterPeering struct {
32087	autorest.Response `json:"-"`
32088	// VirtualRouterPeeringProperties - The properties of the Virtual Router Peering.
32089	*VirtualRouterPeeringProperties `json:"properties,omitempty"`
32090	// Name - Gets name of the peering unique to VirtualRouter. This name can be used to access the resource.
32091	Name *string `json:"name,omitempty"`
32092	// Etag - READ-ONLY; Gets a unique read-only string that changes whenever the resource is updated.
32093	Etag *string `json:"etag,omitempty"`
32094	// Type - READ-ONLY; Peering type.
32095	Type *string `json:"type,omitempty"`
32096	// ID - Resource ID.
32097	ID *string `json:"id,omitempty"`
32098}
32099
32100// MarshalJSON is the custom marshaler for VirtualRouterPeering.
32101func (vrp VirtualRouterPeering) MarshalJSON() ([]byte, error) {
32102	objectMap := make(map[string]interface{})
32103	if vrp.VirtualRouterPeeringProperties != nil {
32104		objectMap["properties"] = vrp.VirtualRouterPeeringProperties
32105	}
32106	if vrp.Name != nil {
32107		objectMap["name"] = vrp.Name
32108	}
32109	if vrp.ID != nil {
32110		objectMap["id"] = vrp.ID
32111	}
32112	return json.Marshal(objectMap)
32113}
32114
32115// UnmarshalJSON is the custom unmarshaler for VirtualRouterPeering struct.
32116func (vrp *VirtualRouterPeering) UnmarshalJSON(body []byte) error {
32117	var m map[string]*json.RawMessage
32118	err := json.Unmarshal(body, &m)
32119	if err != nil {
32120		return err
32121	}
32122	for k, v := range m {
32123		switch k {
32124		case "properties":
32125			if v != nil {
32126				var virtualRouterPeeringProperties VirtualRouterPeeringProperties
32127				err = json.Unmarshal(*v, &virtualRouterPeeringProperties)
32128				if err != nil {
32129					return err
32130				}
32131				vrp.VirtualRouterPeeringProperties = &virtualRouterPeeringProperties
32132			}
32133		case "name":
32134			if v != nil {
32135				var name string
32136				err = json.Unmarshal(*v, &name)
32137				if err != nil {
32138					return err
32139				}
32140				vrp.Name = &name
32141			}
32142		case "etag":
32143			if v != nil {
32144				var etag string
32145				err = json.Unmarshal(*v, &etag)
32146				if err != nil {
32147					return err
32148				}
32149				vrp.Etag = &etag
32150			}
32151		case "type":
32152			if v != nil {
32153				var typeVar string
32154				err = json.Unmarshal(*v, &typeVar)
32155				if err != nil {
32156					return err
32157				}
32158				vrp.Type = &typeVar
32159			}
32160		case "id":
32161			if v != nil {
32162				var ID string
32163				err = json.Unmarshal(*v, &ID)
32164				if err != nil {
32165					return err
32166				}
32167				vrp.ID = &ID
32168			}
32169		}
32170	}
32171
32172	return nil
32173}
32174
32175// VirtualRouterPeeringListResult response for ListVirtualRouterPeerings API service call.
32176type VirtualRouterPeeringListResult struct {
32177	autorest.Response `json:"-"`
32178	// Value - List of VirtualRouterPeerings in a VirtualRouter.
32179	Value *[]VirtualRouterPeering `json:"value,omitempty"`
32180	// NextLink - URL to get the next set of results.
32181	NextLink *string `json:"nextLink,omitempty"`
32182}
32183
32184// VirtualRouterPeeringListResultIterator provides access to a complete listing of VirtualRouterPeering
32185// values.
32186type VirtualRouterPeeringListResultIterator struct {
32187	i    int
32188	page VirtualRouterPeeringListResultPage
32189}
32190
32191// NextWithContext advances to the next value.  If there was an error making
32192// the request the iterator does not advance and the error is returned.
32193func (iter *VirtualRouterPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
32194	if tracing.IsEnabled() {
32195		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultIterator.NextWithContext")
32196		defer func() {
32197			sc := -1
32198			if iter.Response().Response.Response != nil {
32199				sc = iter.Response().Response.Response.StatusCode
32200			}
32201			tracing.EndSpan(ctx, sc, err)
32202		}()
32203	}
32204	iter.i++
32205	if iter.i < len(iter.page.Values()) {
32206		return nil
32207	}
32208	err = iter.page.NextWithContext(ctx)
32209	if err != nil {
32210		iter.i--
32211		return err
32212	}
32213	iter.i = 0
32214	return nil
32215}
32216
32217// Next advances to the next value.  If there was an error making
32218// the request the iterator does not advance and the error is returned.
32219// Deprecated: Use NextWithContext() instead.
32220func (iter *VirtualRouterPeeringListResultIterator) Next() error {
32221	return iter.NextWithContext(context.Background())
32222}
32223
32224// NotDone returns true if the enumeration should be started or is not yet complete.
32225func (iter VirtualRouterPeeringListResultIterator) NotDone() bool {
32226	return iter.page.NotDone() && iter.i < len(iter.page.Values())
32227}
32228
32229// Response returns the raw server response from the last page request.
32230func (iter VirtualRouterPeeringListResultIterator) Response() VirtualRouterPeeringListResult {
32231	return iter.page.Response()
32232}
32233
32234// Value returns the current value or a zero-initialized value if the
32235// iterator has advanced beyond the end of the collection.
32236func (iter VirtualRouterPeeringListResultIterator) Value() VirtualRouterPeering {
32237	if !iter.page.NotDone() {
32238		return VirtualRouterPeering{}
32239	}
32240	return iter.page.Values()[iter.i]
32241}
32242
32243// Creates a new instance of the VirtualRouterPeeringListResultIterator type.
32244func NewVirtualRouterPeeringListResultIterator(page VirtualRouterPeeringListResultPage) VirtualRouterPeeringListResultIterator {
32245	return VirtualRouterPeeringListResultIterator{page: page}
32246}
32247
32248// IsEmpty returns true if the ListResult contains no values.
32249func (vrplr VirtualRouterPeeringListResult) IsEmpty() bool {
32250	return vrplr.Value == nil || len(*vrplr.Value) == 0
32251}
32252
32253// virtualRouterPeeringListResultPreparer prepares a request to retrieve the next set of results.
32254// It returns nil if no more results exist.
32255func (vrplr VirtualRouterPeeringListResult) virtualRouterPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
32256	if vrplr.NextLink == nil || len(to.String(vrplr.NextLink)) < 1 {
32257		return nil, nil
32258	}
32259	return autorest.Prepare((&http.Request{}).WithContext(ctx),
32260		autorest.AsJSON(),
32261		autorest.AsGet(),
32262		autorest.WithBaseURL(to.String(vrplr.NextLink)))
32263}
32264
32265// VirtualRouterPeeringListResultPage contains a page of VirtualRouterPeering values.
32266type VirtualRouterPeeringListResultPage struct {
32267	fn    func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)
32268	vrplr VirtualRouterPeeringListResult
32269}
32270
32271// NextWithContext advances to the next page of values.  If there was an error making
32272// the request the page does not advance and the error is returned.
32273func (page *VirtualRouterPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
32274	if tracing.IsEnabled() {
32275		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultPage.NextWithContext")
32276		defer func() {
32277			sc := -1
32278			if page.Response().Response.Response != nil {
32279				sc = page.Response().Response.Response.StatusCode
32280			}
32281			tracing.EndSpan(ctx, sc, err)
32282		}()
32283	}
32284	next, err := page.fn(ctx, page.vrplr)
32285	if err != nil {
32286		return err
32287	}
32288	page.vrplr = next
32289	return nil
32290}
32291
32292// Next advances to the next page of values.  If there was an error making
32293// the request the page does not advance and the error is returned.
32294// Deprecated: Use NextWithContext() instead.
32295func (page *VirtualRouterPeeringListResultPage) Next() error {
32296	return page.NextWithContext(context.Background())
32297}
32298
32299// NotDone returns true if the page enumeration should be started or is not yet complete.
32300func (page VirtualRouterPeeringListResultPage) NotDone() bool {
32301	return !page.vrplr.IsEmpty()
32302}
32303
32304// Response returns the raw server response from the last page request.
32305func (page VirtualRouterPeeringListResultPage) Response() VirtualRouterPeeringListResult {
32306	return page.vrplr
32307}
32308
32309// Values returns the slice of values for the current page or nil if there are no values.
32310func (page VirtualRouterPeeringListResultPage) Values() []VirtualRouterPeering {
32311	if page.vrplr.IsEmpty() {
32312		return nil
32313	}
32314	return *page.vrplr.Value
32315}
32316
32317// Creates a new instance of the VirtualRouterPeeringListResultPage type.
32318func NewVirtualRouterPeeringListResultPage(getNextPage func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)) VirtualRouterPeeringListResultPage {
32319	return VirtualRouterPeeringListResultPage{fn: getNextPage}
32320}
32321
32322// VirtualRouterPeeringProperties properties of the rule group.
32323type VirtualRouterPeeringProperties struct {
32324	// PeerAsn - Peer ASN.
32325	PeerAsn *int64 `json:"peerAsn,omitempty"`
32326	// PeerIP - Peer IP.
32327	PeerIP *string `json:"peerIp,omitempty"`
32328	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32329	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32330}
32331
32332// VirtualRouterPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32333// long-running operation.
32334type VirtualRouterPeeringsCreateOrUpdateFuture struct {
32335	azure.Future
32336}
32337
32338// Result returns the result of the asynchronous operation.
32339// If the operation has not completed it will return an error.
32340func (future *VirtualRouterPeeringsCreateOrUpdateFuture) Result(client VirtualRouterPeeringsClient) (vrp VirtualRouterPeering, err error) {
32341	var done bool
32342	done, err = future.DoneWithContext(context.Background(), client)
32343	if err != nil {
32344		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32345		return
32346	}
32347	if !done {
32348		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsCreateOrUpdateFuture")
32349		return
32350	}
32351	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32352	if vrp.Response.Response, err = future.GetResult(sender); err == nil && vrp.Response.Response.StatusCode != http.StatusNoContent {
32353		vrp, err = client.CreateOrUpdateResponder(vrp.Response.Response)
32354		if err != nil {
32355			err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", vrp.Response.Response, "Failure responding to request")
32356		}
32357	}
32358	return
32359}
32360
32361// VirtualRouterPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
32362// long-running operation.
32363type VirtualRouterPeeringsDeleteFuture struct {
32364	azure.Future
32365}
32366
32367// Result returns the result of the asynchronous operation.
32368// If the operation has not completed it will return an error.
32369func (future *VirtualRouterPeeringsDeleteFuture) Result(client VirtualRouterPeeringsClient) (ar autorest.Response, err error) {
32370	var done bool
32371	done, err = future.DoneWithContext(context.Background(), client)
32372	if err != nil {
32373		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
32374		return
32375	}
32376	if !done {
32377		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsDeleteFuture")
32378		return
32379	}
32380	ar.Response = future.Response()
32381	return
32382}
32383
32384// VirtualRouterPropertiesFormat virtual Router definition
32385type VirtualRouterPropertiesFormat struct {
32386	// VirtualRouterAsn - VirtualRouter ASN.
32387	VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"`
32388	// VirtualRouterIps - VirtualRouter IPs
32389	VirtualRouterIps *[]string `json:"virtualRouterIps,omitempty"`
32390	// HostedSubnet - The Subnet on which VirtualRouter is hosted.
32391	HostedSubnet *SubResource `json:"hostedSubnet,omitempty"`
32392	// HostedGateway - The Gateway on which VirtualRouter is hosted.
32393	HostedGateway *SubResource `json:"hostedGateway,omitempty"`
32394	// Peerings - READ-ONLY; List of references to VirtualRouterPeerings
32395	Peerings *[]SubResource `json:"peerings,omitempty"`
32396	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32397	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32398}
32399
32400// VirtualRoutersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32401// long-running operation.
32402type VirtualRoutersCreateOrUpdateFuture struct {
32403	azure.Future
32404}
32405
32406// Result returns the result of the asynchronous operation.
32407// If the operation has not completed it will return an error.
32408func (future *VirtualRoutersCreateOrUpdateFuture) Result(client VirtualRoutersClient) (vr VirtualRouter, err error) {
32409	var done bool
32410	done, err = future.DoneWithContext(context.Background(), client)
32411	if err != nil {
32412		err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32413		return
32414	}
32415	if !done {
32416		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersCreateOrUpdateFuture")
32417		return
32418	}
32419	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32420	if vr.Response.Response, err = future.GetResult(sender); err == nil && vr.Response.Response.StatusCode != http.StatusNoContent {
32421		vr, err = client.CreateOrUpdateResponder(vr.Response.Response)
32422		if err != nil {
32423			err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", vr.Response.Response, "Failure responding to request")
32424		}
32425	}
32426	return
32427}
32428
32429// VirtualRoutersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
32430// operation.
32431type VirtualRoutersDeleteFuture struct {
32432	azure.Future
32433}
32434
32435// Result returns the result of the asynchronous operation.
32436// If the operation has not completed it will return an error.
32437func (future *VirtualRoutersDeleteFuture) Result(client VirtualRoutersClient) (ar autorest.Response, err error) {
32438	var done bool
32439	done, err = future.DoneWithContext(context.Background(), client)
32440	if err != nil {
32441		err = autorest.NewErrorWithError(err, "network.VirtualRoutersDeleteFuture", "Result", future.Response(), "Polling failure")
32442		return
32443	}
32444	if !done {
32445		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersDeleteFuture")
32446		return
32447	}
32448	ar.Response = future.Response()
32449	return
32450}
32451
32452// VirtualWAN virtualWAN Resource.
32453type VirtualWAN struct {
32454	autorest.Response `json:"-"`
32455	// VirtualWanProperties - Properties of the virtual WAN.
32456	*VirtualWanProperties `json:"properties,omitempty"`
32457	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32458	Etag *string `json:"etag,omitempty"`
32459	// ID - Resource ID.
32460	ID *string `json:"id,omitempty"`
32461	// Name - READ-ONLY; Resource name.
32462	Name *string `json:"name,omitempty"`
32463	// Type - READ-ONLY; Resource type.
32464	Type *string `json:"type,omitempty"`
32465	// Location - Resource location.
32466	Location *string `json:"location,omitempty"`
32467	// Tags - Resource tags.
32468	Tags map[string]*string `json:"tags"`
32469}
32470
32471// MarshalJSON is the custom marshaler for VirtualWAN.
32472func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
32473	objectMap := make(map[string]interface{})
32474	if vw.VirtualWanProperties != nil {
32475		objectMap["properties"] = vw.VirtualWanProperties
32476	}
32477	if vw.ID != nil {
32478		objectMap["id"] = vw.ID
32479	}
32480	if vw.Location != nil {
32481		objectMap["location"] = vw.Location
32482	}
32483	if vw.Tags != nil {
32484		objectMap["tags"] = vw.Tags
32485	}
32486	return json.Marshal(objectMap)
32487}
32488
32489// UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
32490func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
32491	var m map[string]*json.RawMessage
32492	err := json.Unmarshal(body, &m)
32493	if err != nil {
32494		return err
32495	}
32496	for k, v := range m {
32497		switch k {
32498		case "properties":
32499			if v != nil {
32500				var virtualWanProperties VirtualWanProperties
32501				err = json.Unmarshal(*v, &virtualWanProperties)
32502				if err != nil {
32503					return err
32504				}
32505				vw.VirtualWanProperties = &virtualWanProperties
32506			}
32507		case "etag":
32508			if v != nil {
32509				var etag string
32510				err = json.Unmarshal(*v, &etag)
32511				if err != nil {
32512					return err
32513				}
32514				vw.Etag = &etag
32515			}
32516		case "id":
32517			if v != nil {
32518				var ID string
32519				err = json.Unmarshal(*v, &ID)
32520				if err != nil {
32521					return err
32522				}
32523				vw.ID = &ID
32524			}
32525		case "name":
32526			if v != nil {
32527				var name string
32528				err = json.Unmarshal(*v, &name)
32529				if err != nil {
32530					return err
32531				}
32532				vw.Name = &name
32533			}
32534		case "type":
32535			if v != nil {
32536				var typeVar string
32537				err = json.Unmarshal(*v, &typeVar)
32538				if err != nil {
32539					return err
32540				}
32541				vw.Type = &typeVar
32542			}
32543		case "location":
32544			if v != nil {
32545				var location string
32546				err = json.Unmarshal(*v, &location)
32547				if err != nil {
32548					return err
32549				}
32550				vw.Location = &location
32551			}
32552		case "tags":
32553			if v != nil {
32554				var tags map[string]*string
32555				err = json.Unmarshal(*v, &tags)
32556				if err != nil {
32557					return err
32558				}
32559				vw.Tags = tags
32560			}
32561		}
32562	}
32563
32564	return nil
32565}
32566
32567// VirtualWanProperties parameters for VirtualWAN.
32568type VirtualWanProperties struct {
32569	// DisableVpnEncryption - Vpn encryption to be disabled or not.
32570	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
32571	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
32572	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
32573	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
32574	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
32575	// SecurityProviderName - The Security Provider name.
32576	SecurityProviderName *string `json:"securityProviderName,omitempty"`
32577	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
32578	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
32579	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
32580	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
32581	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
32582	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
32583	// P2SVpnServerConfigurations - List of all P2SVpnServerConfigurations associated with the virtual wan.
32584	P2SVpnServerConfigurations *[]P2SVpnServerConfiguration `json:"p2SVpnServerConfigurations,omitempty"`
32585	// ProvisioningState - The provisioning state of the virtual WAN resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32586	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32587}
32588
32589// VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
32590// long-running operation.
32591type VirtualWansCreateOrUpdateFuture struct {
32592	azure.Future
32593}
32594
32595// Result returns the result of the asynchronous operation.
32596// If the operation has not completed it will return an error.
32597func (future *VirtualWansCreateOrUpdateFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
32598	var done bool
32599	done, err = future.DoneWithContext(context.Background(), client)
32600	if err != nil {
32601		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
32602		return
32603	}
32604	if !done {
32605		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
32606		return
32607	}
32608	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32609	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
32610		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
32611		if err != nil {
32612			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
32613		}
32614	}
32615	return
32616}
32617
32618// VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
32619// operation.
32620type VirtualWansDeleteFuture struct {
32621	azure.Future
32622}
32623
32624// Result returns the result of the asynchronous operation.
32625// If the operation has not completed it will return an error.
32626func (future *VirtualWansDeleteFuture) Result(client VirtualWansClient) (ar autorest.Response, err error) {
32627	var done bool
32628	done, err = future.DoneWithContext(context.Background(), client)
32629	if err != nil {
32630		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
32631		return
32632	}
32633	if !done {
32634		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
32635		return
32636	}
32637	ar.Response = future.Response()
32638	return
32639}
32640
32641// VirtualWanSecurityProvider collection of SecurityProviders.
32642type VirtualWanSecurityProvider struct {
32643	// Name - Name of the security provider.
32644	Name *string `json:"name,omitempty"`
32645	// URL - Url of the security provider.
32646	URL *string `json:"url,omitempty"`
32647	// Type - Name of the security provider. Possible values include: 'External', 'Native'
32648	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
32649}
32650
32651// VirtualWanSecurityProviders collection of SecurityProviders.
32652type VirtualWanSecurityProviders struct {
32653	autorest.Response `json:"-"`
32654	// SupportedProviders - List of VirtualWAN security providers.
32655	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
32656}
32657
32658// VirtualWansUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
32659// operation.
32660type VirtualWansUpdateTagsFuture struct {
32661	azure.Future
32662}
32663
32664// Result returns the result of the asynchronous operation.
32665// If the operation has not completed it will return an error.
32666func (future *VirtualWansUpdateTagsFuture) Result(client VirtualWansClient) (vw VirtualWAN, err error) {
32667	var done bool
32668	done, err = future.DoneWithContext(context.Background(), client)
32669	if err != nil {
32670		err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", future.Response(), "Polling failure")
32671		return
32672	}
32673	if !done {
32674		err = azure.NewAsyncOpIncompleteError("network.VirtualWansUpdateTagsFuture")
32675		return
32676	}
32677	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
32678	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
32679		vw, err = client.UpdateTagsResponder(vw.Response.Response)
32680		if err != nil {
32681			err = autorest.NewErrorWithError(err, "network.VirtualWansUpdateTagsFuture", "Result", vw.Response.Response, "Failure responding to request")
32682		}
32683	}
32684	return
32685}
32686
32687// VpnClientConfiguration vpnClientConfiguration for P2S client.
32688type VpnClientConfiguration struct {
32689	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
32690	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
32691	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
32692	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
32693	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
32694	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
32695	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
32696	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
32697	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
32698	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
32699	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
32700	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
32701	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
32702	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
32703	// AadTenant - The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
32704	AadTenant *string `json:"aadTenant,omitempty"`
32705	// AadAudience - The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
32706	AadAudience *string `json:"aadAudience,omitempty"`
32707	// AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
32708	AadIssuer *string `json:"aadIssuer,omitempty"`
32709}
32710
32711// VpnClientConnectionHealth vpnClientConnectionHealth properties.
32712type VpnClientConnectionHealth struct {
32713	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection.
32714	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
32715	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection.
32716	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
32717	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
32718	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
32719	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
32720	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
32721}
32722
32723// VpnClientConnectionHealthDetail VPN client connection health detail.
32724type VpnClientConnectionHealthDetail struct {
32725	// VpnConnectionID - READ-ONLY; The vpn client Id.
32726	VpnConnectionID *string `json:"vpnConnectionId,omitempty"`
32727	// VpnConnectionDuration - READ-ONLY; The duration time of a connected vpn client.
32728	VpnConnectionDuration *int64 `json:"vpnConnectionDuration,omitempty"`
32729	// VpnConnectionTime - READ-ONLY; The start time of a connected vpn client.
32730	VpnConnectionTime *string `json:"vpnConnectionTime,omitempty"`
32731	// PublicIPAddress - READ-ONLY; The public Ip of a connected vpn client.
32732	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
32733	// PrivateIPAddress - READ-ONLY; The assigned private Ip of a connected vpn client.
32734	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
32735	// VpnUserName - READ-ONLY; The user name of a connected vpn client.
32736	VpnUserName *string `json:"vpnUserName,omitempty"`
32737	// MaxBandwidth - READ-ONLY; The max band width.
32738	MaxBandwidth *int64 `json:"maxBandwidth,omitempty"`
32739	// EgressPacketsTransferred - READ-ONLY; The egress packets per second.
32740	EgressPacketsTransferred *int64 `json:"egressPacketsTransferred,omitempty"`
32741	// EgressBytesTransferred - READ-ONLY; The egress bytes per second.
32742	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
32743	// IngressPacketsTransferred - READ-ONLY; The ingress packets per second.
32744	IngressPacketsTransferred *int64 `json:"ingressPacketsTransferred,omitempty"`
32745	// IngressBytesTransferred - READ-ONLY; The ingress bytes per second.
32746	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
32747	// MaxPacketsPerSecond - READ-ONLY; The max packets transferred per second.
32748	MaxPacketsPerSecond *int64 `json:"maxPacketsPerSecond,omitempty"`
32749}
32750
32751// VpnClientConnectionHealthDetailListResult list of virtual network gateway vpn client connection health.
32752type VpnClientConnectionHealthDetailListResult struct {
32753	autorest.Response `json:"-"`
32754	// Value - List of vpn client connection health.
32755	Value *[]VpnClientConnectionHealthDetail `json:"value,omitempty"`
32756}
32757
32758// VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
32759type VpnClientIPsecParameters struct {
32760	autorest.Response `json:"-"`
32761	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
32762	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
32763	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
32764	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
32765	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
32766	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
32767	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
32768	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
32769	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
32770	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
32771	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
32772	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
32773	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
32774	DhGroup DhGroup `json:"dhGroup,omitempty"`
32775	// 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'
32776	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
32777}
32778
32779// VpnClientParameters vpn Client Parameters for package generation.
32780type VpnClientParameters struct {
32781	// ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86'
32782	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
32783	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
32784	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
32785	// 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.
32786	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
32787	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
32788	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
32789}
32790
32791// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
32792type VpnClientRevokedCertificate struct {
32793	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
32794	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
32795	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32796	Name *string `json:"name,omitempty"`
32797	// Etag - A unique read-only string that changes whenever the resource is updated.
32798	Etag *string `json:"etag,omitempty"`
32799	// ID - Resource ID.
32800	ID *string `json:"id,omitempty"`
32801}
32802
32803// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
32804func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
32805	objectMap := make(map[string]interface{})
32806	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
32807		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
32808	}
32809	if vcrc.Name != nil {
32810		objectMap["name"] = vcrc.Name
32811	}
32812	if vcrc.Etag != nil {
32813		objectMap["etag"] = vcrc.Etag
32814	}
32815	if vcrc.ID != nil {
32816		objectMap["id"] = vcrc.ID
32817	}
32818	return json.Marshal(objectMap)
32819}
32820
32821// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
32822func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
32823	var m map[string]*json.RawMessage
32824	err := json.Unmarshal(body, &m)
32825	if err != nil {
32826		return err
32827	}
32828	for k, v := range m {
32829		switch k {
32830		case "properties":
32831			if v != nil {
32832				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
32833				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
32834				if err != nil {
32835					return err
32836				}
32837				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
32838			}
32839		case "name":
32840			if v != nil {
32841				var name string
32842				err = json.Unmarshal(*v, &name)
32843				if err != nil {
32844					return err
32845				}
32846				vcrc.Name = &name
32847			}
32848		case "etag":
32849			if v != nil {
32850				var etag string
32851				err = json.Unmarshal(*v, &etag)
32852				if err != nil {
32853					return err
32854				}
32855				vcrc.Etag = &etag
32856			}
32857		case "id":
32858			if v != nil {
32859				var ID string
32860				err = json.Unmarshal(*v, &ID)
32861				if err != nil {
32862					return err
32863				}
32864				vcrc.ID = &ID
32865			}
32866		}
32867	}
32868
32869	return nil
32870}
32871
32872// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
32873// network gateway.
32874type VpnClientRevokedCertificatePropertiesFormat struct {
32875	// Thumbprint - The revoked VPN client certificate thumbprint.
32876	Thumbprint *string `json:"thumbprint,omitempty"`
32877	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32878	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32879}
32880
32881// VpnClientRootCertificate VPN client root certificate of virtual network gateway.
32882type VpnClientRootCertificate struct {
32883	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
32884	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
32885	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32886	Name *string `json:"name,omitempty"`
32887	// Etag - A unique read-only string that changes whenever the resource is updated.
32888	Etag *string `json:"etag,omitempty"`
32889	// ID - Resource ID.
32890	ID *string `json:"id,omitempty"`
32891}
32892
32893// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
32894func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
32895	objectMap := make(map[string]interface{})
32896	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
32897		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
32898	}
32899	if vcrc.Name != nil {
32900		objectMap["name"] = vcrc.Name
32901	}
32902	if vcrc.Etag != nil {
32903		objectMap["etag"] = vcrc.Etag
32904	}
32905	if vcrc.ID != nil {
32906		objectMap["id"] = vcrc.ID
32907	}
32908	return json.Marshal(objectMap)
32909}
32910
32911// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
32912func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
32913	var m map[string]*json.RawMessage
32914	err := json.Unmarshal(body, &m)
32915	if err != nil {
32916		return err
32917	}
32918	for k, v := range m {
32919		switch k {
32920		case "properties":
32921			if v != nil {
32922				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
32923				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
32924				if err != nil {
32925					return err
32926				}
32927				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
32928			}
32929		case "name":
32930			if v != nil {
32931				var name string
32932				err = json.Unmarshal(*v, &name)
32933				if err != nil {
32934					return err
32935				}
32936				vcrc.Name = &name
32937			}
32938		case "etag":
32939			if v != nil {
32940				var etag string
32941				err = json.Unmarshal(*v, &etag)
32942				if err != nil {
32943					return err
32944				}
32945				vcrc.Etag = &etag
32946			}
32947		case "id":
32948			if v != nil {
32949				var ID string
32950				err = json.Unmarshal(*v, &ID)
32951				if err != nil {
32952					return err
32953				}
32954				vcrc.ID = &ID
32955			}
32956		}
32957	}
32958
32959	return nil
32960}
32961
32962// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway.
32963type VpnClientRootCertificatePropertiesFormat struct {
32964	// PublicCertData - The certificate public data.
32965	PublicCertData *string `json:"publicCertData,omitempty"`
32966	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
32967	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
32968}
32969
32970// VpnConnection vpnConnection Resource.
32971type VpnConnection struct {
32972	autorest.Response `json:"-"`
32973	// VpnConnectionProperties - Properties of the VPN connection.
32974	*VpnConnectionProperties `json:"properties,omitempty"`
32975	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
32976	Name *string `json:"name,omitempty"`
32977	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
32978	Etag *string `json:"etag,omitempty"`
32979	// ID - Resource ID.
32980	ID *string `json:"id,omitempty"`
32981}
32982
32983// MarshalJSON is the custom marshaler for VpnConnection.
32984func (vc VpnConnection) MarshalJSON() ([]byte, error) {
32985	objectMap := make(map[string]interface{})
32986	if vc.VpnConnectionProperties != nil {
32987		objectMap["properties"] = vc.VpnConnectionProperties
32988	}
32989	if vc.Name != nil {
32990		objectMap["name"] = vc.Name
32991	}
32992	if vc.ID != nil {
32993		objectMap["id"] = vc.ID
32994	}
32995	return json.Marshal(objectMap)
32996}
32997
32998// UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
32999func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
33000	var m map[string]*json.RawMessage
33001	err := json.Unmarshal(body, &m)
33002	if err != nil {
33003		return err
33004	}
33005	for k, v := range m {
33006		switch k {
33007		case "properties":
33008			if v != nil {
33009				var vpnConnectionProperties VpnConnectionProperties
33010				err = json.Unmarshal(*v, &vpnConnectionProperties)
33011				if err != nil {
33012					return err
33013				}
33014				vc.VpnConnectionProperties = &vpnConnectionProperties
33015			}
33016		case "name":
33017			if v != nil {
33018				var name string
33019				err = json.Unmarshal(*v, &name)
33020				if err != nil {
33021					return err
33022				}
33023				vc.Name = &name
33024			}
33025		case "etag":
33026			if v != nil {
33027				var etag string
33028				err = json.Unmarshal(*v, &etag)
33029				if err != nil {
33030					return err
33031				}
33032				vc.Etag = &etag
33033			}
33034		case "id":
33035			if v != nil {
33036				var ID string
33037				err = json.Unmarshal(*v, &ID)
33038				if err != nil {
33039					return err
33040				}
33041				vc.ID = &ID
33042			}
33043		}
33044	}
33045
33046	return nil
33047}
33048
33049// VpnConnectionProperties parameters for VpnConnection.
33050type VpnConnectionProperties struct {
33051	// RemoteVpnSite - Id of the connected vpn site.
33052	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
33053	// RoutingWeight - Routing weight for vpn connection.
33054	RoutingWeight *int32 `json:"routingWeight,omitempty"`
33055	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
33056	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
33057	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
33058	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
33059	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
33060	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
33061	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
33062	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
33063	// ConnectionBandwidth - Expected bandwidth in MBPS.
33064	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
33065	// SharedKey - SharedKey for the vpn connection.
33066	SharedKey *string `json:"sharedKey,omitempty"`
33067	// EnableBgp - EnableBgp flag.
33068	EnableBgp *bool `json:"enableBgp,omitempty"`
33069	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
33070	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
33071	// IpsecPolicies - The IPSec Policies to be considered by this connection.
33072	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
33073	// EnableRateLimiting - EnableBgp flag.
33074	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
33075	// EnableInternetSecurity - Enable internet security.
33076	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
33077	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
33078	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
33079	// ProvisioningState - The provisioning state of the VPN connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33080	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33081	// VpnLinkConnections - List of all vpn site link connections to the gateway.
33082	VpnLinkConnections *[]VpnSiteLinkConnection `json:"vpnLinkConnections,omitempty"`
33083}
33084
33085// VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33086// long-running operation.
33087type VpnConnectionsCreateOrUpdateFuture struct {
33088	azure.Future
33089}
33090
33091// Result returns the result of the asynchronous operation.
33092// If the operation has not completed it will return an error.
33093func (future *VpnConnectionsCreateOrUpdateFuture) Result(client VpnConnectionsClient) (vc VpnConnection, err error) {
33094	var done bool
33095	done, err = future.DoneWithContext(context.Background(), client)
33096	if err != nil {
33097		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33098		return
33099	}
33100	if !done {
33101		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
33102		return
33103	}
33104	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33105	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
33106		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
33107		if err != nil {
33108			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
33109		}
33110	}
33111	return
33112}
33113
33114// VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33115// operation.
33116type VpnConnectionsDeleteFuture struct {
33117	azure.Future
33118}
33119
33120// Result returns the result of the asynchronous operation.
33121// If the operation has not completed it will return an error.
33122func (future *VpnConnectionsDeleteFuture) Result(client VpnConnectionsClient) (ar autorest.Response, err error) {
33123	var done bool
33124	done, err = future.DoneWithContext(context.Background(), client)
33125	if err != nil {
33126		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
33127		return
33128	}
33129	if !done {
33130		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
33131		return
33132	}
33133	ar.Response = future.Response()
33134	return
33135}
33136
33137// VpnDeviceScriptParameters vpn device configuration script generation parameters.
33138type VpnDeviceScriptParameters struct {
33139	// Vendor - The vendor for the vpn device.
33140	Vendor *string `json:"vendor,omitempty"`
33141	// DeviceFamily - The device family for the vpn device.
33142	DeviceFamily *string `json:"deviceFamily,omitempty"`
33143	// FirmwareVersion - The firmware version for the vpn device.
33144	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
33145}
33146
33147// VpnGateway vpnGateway Resource.
33148type VpnGateway struct {
33149	autorest.Response `json:"-"`
33150	// VpnGatewayProperties - Properties of the VPN gateway.
33151	*VpnGatewayProperties `json:"properties,omitempty"`
33152	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33153	Etag *string `json:"etag,omitempty"`
33154	// ID - Resource ID.
33155	ID *string `json:"id,omitempty"`
33156	// Name - READ-ONLY; Resource name.
33157	Name *string `json:"name,omitempty"`
33158	// Type - READ-ONLY; Resource type.
33159	Type *string `json:"type,omitempty"`
33160	// Location - Resource location.
33161	Location *string `json:"location,omitempty"`
33162	// Tags - Resource tags.
33163	Tags map[string]*string `json:"tags"`
33164}
33165
33166// MarshalJSON is the custom marshaler for VpnGateway.
33167func (vg VpnGateway) MarshalJSON() ([]byte, error) {
33168	objectMap := make(map[string]interface{})
33169	if vg.VpnGatewayProperties != nil {
33170		objectMap["properties"] = vg.VpnGatewayProperties
33171	}
33172	if vg.ID != nil {
33173		objectMap["id"] = vg.ID
33174	}
33175	if vg.Location != nil {
33176		objectMap["location"] = vg.Location
33177	}
33178	if vg.Tags != nil {
33179		objectMap["tags"] = vg.Tags
33180	}
33181	return json.Marshal(objectMap)
33182}
33183
33184// UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
33185func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
33186	var m map[string]*json.RawMessage
33187	err := json.Unmarshal(body, &m)
33188	if err != nil {
33189		return err
33190	}
33191	for k, v := range m {
33192		switch k {
33193		case "properties":
33194			if v != nil {
33195				var vpnGatewayProperties VpnGatewayProperties
33196				err = json.Unmarshal(*v, &vpnGatewayProperties)
33197				if err != nil {
33198					return err
33199				}
33200				vg.VpnGatewayProperties = &vpnGatewayProperties
33201			}
33202		case "etag":
33203			if v != nil {
33204				var etag string
33205				err = json.Unmarshal(*v, &etag)
33206				if err != nil {
33207					return err
33208				}
33209				vg.Etag = &etag
33210			}
33211		case "id":
33212			if v != nil {
33213				var ID string
33214				err = json.Unmarshal(*v, &ID)
33215				if err != nil {
33216					return err
33217				}
33218				vg.ID = &ID
33219			}
33220		case "name":
33221			if v != nil {
33222				var name string
33223				err = json.Unmarshal(*v, &name)
33224				if err != nil {
33225					return err
33226				}
33227				vg.Name = &name
33228			}
33229		case "type":
33230			if v != nil {
33231				var typeVar string
33232				err = json.Unmarshal(*v, &typeVar)
33233				if err != nil {
33234					return err
33235				}
33236				vg.Type = &typeVar
33237			}
33238		case "location":
33239			if v != nil {
33240				var location string
33241				err = json.Unmarshal(*v, &location)
33242				if err != nil {
33243					return err
33244				}
33245				vg.Location = &location
33246			}
33247		case "tags":
33248			if v != nil {
33249				var tags map[string]*string
33250				err = json.Unmarshal(*v, &tags)
33251				if err != nil {
33252					return err
33253				}
33254				vg.Tags = tags
33255			}
33256		}
33257	}
33258
33259	return nil
33260}
33261
33262// VpnGatewayProperties parameters for VpnGateway.
33263type VpnGatewayProperties struct {
33264	// VirtualHub - The VirtualHub to which the gateway belongs.
33265	VirtualHub *SubResource `json:"virtualHub,omitempty"`
33266	// Connections - List of all vpn connections to the gateway.
33267	Connections *[]VpnConnection `json:"connections,omitempty"`
33268	// BgpSettings - Local network gateway's BGP speaker settings.
33269	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
33270	// ProvisioningState - The provisioning state of the VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33271	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33272	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
33273	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
33274}
33275
33276// VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
33277// long-running operation.
33278type VpnGatewaysCreateOrUpdateFuture struct {
33279	azure.Future
33280}
33281
33282// Result returns the result of the asynchronous operation.
33283// If the operation has not completed it will return an error.
33284func (future *VpnGatewaysCreateOrUpdateFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
33285	var done bool
33286	done, err = future.DoneWithContext(context.Background(), client)
33287	if err != nil {
33288		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33289		return
33290	}
33291	if !done {
33292		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
33293		return
33294	}
33295	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33296	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
33297		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
33298		if err != nil {
33299			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
33300		}
33301	}
33302	return
33303}
33304
33305// VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33306// operation.
33307type VpnGatewaysDeleteFuture struct {
33308	azure.Future
33309}
33310
33311// Result returns the result of the asynchronous operation.
33312// If the operation has not completed it will return an error.
33313func (future *VpnGatewaysDeleteFuture) Result(client VpnGatewaysClient) (ar autorest.Response, err error) {
33314	var done bool
33315	done, err = future.DoneWithContext(context.Background(), client)
33316	if err != nil {
33317		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
33318		return
33319	}
33320	if !done {
33321		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
33322		return
33323	}
33324	ar.Response = future.Response()
33325	return
33326}
33327
33328// VpnGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
33329// operation.
33330type VpnGatewaysResetFuture struct {
33331	azure.Future
33332}
33333
33334// Result returns the result of the asynchronous operation.
33335// If the operation has not completed it will return an error.
33336func (future *VpnGatewaysResetFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
33337	var done bool
33338	done, err = future.DoneWithContext(context.Background(), client)
33339	if err != nil {
33340		err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", future.Response(), "Polling failure")
33341		return
33342	}
33343	if !done {
33344		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysResetFuture")
33345		return
33346	}
33347	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33348	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
33349		vg, err = client.ResetResponder(vg.Response.Response)
33350		if err != nil {
33351			err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", vg.Response.Response, "Failure responding to request")
33352		}
33353	}
33354	return
33355}
33356
33357// VpnGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
33358// operation.
33359type VpnGatewaysUpdateTagsFuture struct {
33360	azure.Future
33361}
33362
33363// Result returns the result of the asynchronous operation.
33364// If the operation has not completed it will return an error.
33365func (future *VpnGatewaysUpdateTagsFuture) Result(client VpnGatewaysClient) (vg VpnGateway, err error) {
33366	var done bool
33367	done, err = future.DoneWithContext(context.Background(), client)
33368	if err != nil {
33369		err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
33370		return
33371	}
33372	if !done {
33373		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysUpdateTagsFuture")
33374		return
33375	}
33376	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33377	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
33378		vg, err = client.UpdateTagsResponder(vg.Response.Response)
33379		if err != nil {
33380			err = autorest.NewErrorWithError(err, "network.VpnGatewaysUpdateTagsFuture", "Result", vg.Response.Response, "Failure responding to request")
33381		}
33382	}
33383	return
33384}
33385
33386// VpnLinkBgpSettings BGP settings details for a link.
33387type VpnLinkBgpSettings struct {
33388	// Asn - The BGP speaker's ASN.
33389	Asn *int64 `json:"asn,omitempty"`
33390	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
33391	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
33392}
33393
33394// VpnLinkProviderProperties list of properties of a link provider.
33395type VpnLinkProviderProperties struct {
33396	// LinkProviderName - Name of the link provider.
33397	LinkProviderName *string `json:"linkProviderName,omitempty"`
33398	// LinkSpeedInMbps - Link speed.
33399	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
33400}
33401
33402// VpnPacketCaptureStartParameters start packet capture parameters on virtual network gateway.
33403type VpnPacketCaptureStartParameters struct {
33404	// FilterData - Start Packet capture parameters.
33405	FilterData *string `json:"filterData,omitempty"`
33406}
33407
33408// VpnPacketCaptureStopParameters stop packet capture parameters.
33409type VpnPacketCaptureStopParameters struct {
33410	// SasURL - SAS url for packet capture on virtual network gateway.
33411	SasURL *string `json:"sasUrl,omitempty"`
33412}
33413
33414// VpnProfileResponse vpn Profile Response for package generation.
33415type VpnProfileResponse struct {
33416	autorest.Response `json:"-"`
33417	// ProfileURL - URL to the VPN profile.
33418	ProfileURL *string `json:"profileUrl,omitempty"`
33419}
33420
33421// VpnSite vpnSite Resource.
33422type VpnSite struct {
33423	autorest.Response `json:"-"`
33424	// VpnSiteProperties - Properties of the VPN site.
33425	*VpnSiteProperties `json:"properties,omitempty"`
33426	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33427	Etag *string `json:"etag,omitempty"`
33428	// ID - Resource ID.
33429	ID *string `json:"id,omitempty"`
33430	// Name - READ-ONLY; Resource name.
33431	Name *string `json:"name,omitempty"`
33432	// Type - READ-ONLY; Resource type.
33433	Type *string `json:"type,omitempty"`
33434	// Location - Resource location.
33435	Location *string `json:"location,omitempty"`
33436	// Tags - Resource tags.
33437	Tags map[string]*string `json:"tags"`
33438}
33439
33440// MarshalJSON is the custom marshaler for VpnSite.
33441func (vs VpnSite) MarshalJSON() ([]byte, error) {
33442	objectMap := make(map[string]interface{})
33443	if vs.VpnSiteProperties != nil {
33444		objectMap["properties"] = vs.VpnSiteProperties
33445	}
33446	if vs.ID != nil {
33447		objectMap["id"] = vs.ID
33448	}
33449	if vs.Location != nil {
33450		objectMap["location"] = vs.Location
33451	}
33452	if vs.Tags != nil {
33453		objectMap["tags"] = vs.Tags
33454	}
33455	return json.Marshal(objectMap)
33456}
33457
33458// UnmarshalJSON is the custom unmarshaler for VpnSite struct.
33459func (vs *VpnSite) UnmarshalJSON(body []byte) error {
33460	var m map[string]*json.RawMessage
33461	err := json.Unmarshal(body, &m)
33462	if err != nil {
33463		return err
33464	}
33465	for k, v := range m {
33466		switch k {
33467		case "properties":
33468			if v != nil {
33469				var vpnSiteProperties VpnSiteProperties
33470				err = json.Unmarshal(*v, &vpnSiteProperties)
33471				if err != nil {
33472					return err
33473				}
33474				vs.VpnSiteProperties = &vpnSiteProperties
33475			}
33476		case "etag":
33477			if v != nil {
33478				var etag string
33479				err = json.Unmarshal(*v, &etag)
33480				if err != nil {
33481					return err
33482				}
33483				vs.Etag = &etag
33484			}
33485		case "id":
33486			if v != nil {
33487				var ID string
33488				err = json.Unmarshal(*v, &ID)
33489				if err != nil {
33490					return err
33491				}
33492				vs.ID = &ID
33493			}
33494		case "name":
33495			if v != nil {
33496				var name string
33497				err = json.Unmarshal(*v, &name)
33498				if err != nil {
33499					return err
33500				}
33501				vs.Name = &name
33502			}
33503		case "type":
33504			if v != nil {
33505				var typeVar string
33506				err = json.Unmarshal(*v, &typeVar)
33507				if err != nil {
33508					return err
33509				}
33510				vs.Type = &typeVar
33511			}
33512		case "location":
33513			if v != nil {
33514				var location string
33515				err = json.Unmarshal(*v, &location)
33516				if err != nil {
33517					return err
33518				}
33519				vs.Location = &location
33520			}
33521		case "tags":
33522			if v != nil {
33523				var tags map[string]*string
33524				err = json.Unmarshal(*v, &tags)
33525				if err != nil {
33526					return err
33527				}
33528				vs.Tags = tags
33529			}
33530		}
33531	}
33532
33533	return nil
33534}
33535
33536// VpnSiteID vpnSite Resource.
33537type VpnSiteID struct {
33538	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
33539	VpnSite *string `json:"vpnSite,omitempty"`
33540}
33541
33542// VpnSiteLink vpnSiteLink Resource.
33543type VpnSiteLink struct {
33544	autorest.Response `json:"-"`
33545	// VpnSiteLinkProperties - Properties of the VPN site link.
33546	*VpnSiteLinkProperties `json:"properties,omitempty"`
33547	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33548	Etag *string `json:"etag,omitempty"`
33549	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
33550	Name *string `json:"name,omitempty"`
33551	// Type - READ-ONLY; Resource type.
33552	Type *string `json:"type,omitempty"`
33553	// ID - Resource ID.
33554	ID *string `json:"id,omitempty"`
33555}
33556
33557// MarshalJSON is the custom marshaler for VpnSiteLink.
33558func (vsl VpnSiteLink) MarshalJSON() ([]byte, error) {
33559	objectMap := make(map[string]interface{})
33560	if vsl.VpnSiteLinkProperties != nil {
33561		objectMap["properties"] = vsl.VpnSiteLinkProperties
33562	}
33563	if vsl.Name != nil {
33564		objectMap["name"] = vsl.Name
33565	}
33566	if vsl.ID != nil {
33567		objectMap["id"] = vsl.ID
33568	}
33569	return json.Marshal(objectMap)
33570}
33571
33572// UnmarshalJSON is the custom unmarshaler for VpnSiteLink struct.
33573func (vsl *VpnSiteLink) UnmarshalJSON(body []byte) error {
33574	var m map[string]*json.RawMessage
33575	err := json.Unmarshal(body, &m)
33576	if err != nil {
33577		return err
33578	}
33579	for k, v := range m {
33580		switch k {
33581		case "properties":
33582			if v != nil {
33583				var vpnSiteLinkProperties VpnSiteLinkProperties
33584				err = json.Unmarshal(*v, &vpnSiteLinkProperties)
33585				if err != nil {
33586					return err
33587				}
33588				vsl.VpnSiteLinkProperties = &vpnSiteLinkProperties
33589			}
33590		case "etag":
33591			if v != nil {
33592				var etag string
33593				err = json.Unmarshal(*v, &etag)
33594				if err != nil {
33595					return err
33596				}
33597				vsl.Etag = &etag
33598			}
33599		case "name":
33600			if v != nil {
33601				var name string
33602				err = json.Unmarshal(*v, &name)
33603				if err != nil {
33604					return err
33605				}
33606				vsl.Name = &name
33607			}
33608		case "type":
33609			if v != nil {
33610				var typeVar string
33611				err = json.Unmarshal(*v, &typeVar)
33612				if err != nil {
33613					return err
33614				}
33615				vsl.Type = &typeVar
33616			}
33617		case "id":
33618			if v != nil {
33619				var ID string
33620				err = json.Unmarshal(*v, &ID)
33621				if err != nil {
33622					return err
33623				}
33624				vsl.ID = &ID
33625			}
33626		}
33627	}
33628
33629	return nil
33630}
33631
33632// VpnSiteLinkConnection vpnSiteLinkConnection Resource.
33633type VpnSiteLinkConnection struct {
33634	autorest.Response `json:"-"`
33635	// VpnSiteLinkConnectionProperties - Properties of the VPN site link connection.
33636	*VpnSiteLinkConnectionProperties `json:"properties,omitempty"`
33637	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
33638	Name *string `json:"name,omitempty"`
33639	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
33640	Etag *string `json:"etag,omitempty"`
33641	// Type - READ-ONLY; Resource type.
33642	Type *string `json:"type,omitempty"`
33643	// ID - Resource ID.
33644	ID *string `json:"id,omitempty"`
33645}
33646
33647// MarshalJSON is the custom marshaler for VpnSiteLinkConnection.
33648func (vslc VpnSiteLinkConnection) MarshalJSON() ([]byte, error) {
33649	objectMap := make(map[string]interface{})
33650	if vslc.VpnSiteLinkConnectionProperties != nil {
33651		objectMap["properties"] = vslc.VpnSiteLinkConnectionProperties
33652	}
33653	if vslc.Name != nil {
33654		objectMap["name"] = vslc.Name
33655	}
33656	if vslc.ID != nil {
33657		objectMap["id"] = vslc.ID
33658	}
33659	return json.Marshal(objectMap)
33660}
33661
33662// UnmarshalJSON is the custom unmarshaler for VpnSiteLinkConnection struct.
33663func (vslc *VpnSiteLinkConnection) UnmarshalJSON(body []byte) error {
33664	var m map[string]*json.RawMessage
33665	err := json.Unmarshal(body, &m)
33666	if err != nil {
33667		return err
33668	}
33669	for k, v := range m {
33670		switch k {
33671		case "properties":
33672			if v != nil {
33673				var vpnSiteLinkConnectionProperties VpnSiteLinkConnectionProperties
33674				err = json.Unmarshal(*v, &vpnSiteLinkConnectionProperties)
33675				if err != nil {
33676					return err
33677				}
33678				vslc.VpnSiteLinkConnectionProperties = &vpnSiteLinkConnectionProperties
33679			}
33680		case "name":
33681			if v != nil {
33682				var name string
33683				err = json.Unmarshal(*v, &name)
33684				if err != nil {
33685					return err
33686				}
33687				vslc.Name = &name
33688			}
33689		case "etag":
33690			if v != nil {
33691				var etag string
33692				err = json.Unmarshal(*v, &etag)
33693				if err != nil {
33694					return err
33695				}
33696				vslc.Etag = &etag
33697			}
33698		case "type":
33699			if v != nil {
33700				var typeVar string
33701				err = json.Unmarshal(*v, &typeVar)
33702				if err != nil {
33703					return err
33704				}
33705				vslc.Type = &typeVar
33706			}
33707		case "id":
33708			if v != nil {
33709				var ID string
33710				err = json.Unmarshal(*v, &ID)
33711				if err != nil {
33712					return err
33713				}
33714				vslc.ID = &ID
33715			}
33716		}
33717	}
33718
33719	return nil
33720}
33721
33722// VpnSiteLinkConnectionProperties parameters for VpnConnection.
33723type VpnSiteLinkConnectionProperties struct {
33724	// VpnSiteLink - Id of the connected vpn site link.
33725	VpnSiteLink *SubResource `json:"vpnSiteLink,omitempty"`
33726	// RoutingWeight - Routing weight for vpn connection.
33727	RoutingWeight *int32 `json:"routingWeight,omitempty"`
33728	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
33729	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
33730	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
33731	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
33732	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
33733	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
33734	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
33735	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
33736	// ConnectionBandwidth - Expected bandwidth in MBPS.
33737	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
33738	// SharedKey - SharedKey for the vpn connection.
33739	SharedKey *string `json:"sharedKey,omitempty"`
33740	// EnableBgp - EnableBgp flag.
33741	EnableBgp *bool `json:"enableBgp,omitempty"`
33742	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
33743	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
33744	// IpsecPolicies - The IPSec Policies to be considered by this connection.
33745	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
33746	// EnableRateLimiting - EnableBgp flag.
33747	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
33748	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
33749	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
33750	// ProvisioningState - The provisioning state of the VPN site link connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33751	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33752}
33753
33754// VpnSiteLinkProperties parameters for VpnSite.
33755type VpnSiteLinkProperties struct {
33756	// LinkProperties - The link provider properties.
33757	LinkProperties *VpnLinkProviderProperties `json:"linkProperties,omitempty"`
33758	// IPAddress - The ip-address for the vpn-site-link.
33759	IPAddress *string `json:"ipAddress,omitempty"`
33760	// BgpProperties - The set of bgp properties.
33761	BgpProperties *VpnLinkBgpSettings `json:"bgpProperties,omitempty"`
33762	// ProvisioningState - The provisioning state of the VPN site link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33763	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33764}
33765
33766// VpnSiteProperties parameters for VpnSite.
33767type VpnSiteProperties struct {
33768	// VirtualWan - The VirtualWAN to which the vpnSite belongs.
33769	VirtualWan *SubResource `json:"virtualWan,omitempty"`
33770	// DeviceProperties - The device properties.
33771	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
33772	// IPAddress - The ip-address for the vpn-site.
33773	IPAddress *string `json:"ipAddress,omitempty"`
33774	// SiteKey - The key for vpn-site that can be used for connections.
33775	SiteKey *string `json:"siteKey,omitempty"`
33776	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
33777	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
33778	// BgpProperties - The set of bgp properties.
33779	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
33780	// ProvisioningState - The provisioning state of the VPN site resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
33781	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
33782	// IsSecuritySite - IsSecuritySite flag.
33783	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
33784	// VpnSiteLinks - List of all vpn site links.
33785	VpnSiteLinks *[]VpnSiteLink `json:"vpnSiteLinks,omitempty"`
33786}
33787
33788// VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
33789// long-running operation.
33790type VpnSitesConfigurationDownloadFuture struct {
33791	azure.Future
33792}
33793
33794// Result returns the result of the asynchronous operation.
33795// If the operation has not completed it will return an error.
33796func (future *VpnSitesConfigurationDownloadFuture) Result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
33797	var done bool
33798	done, err = future.DoneWithContext(context.Background(), client)
33799	if err != nil {
33800		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
33801		return
33802	}
33803	if !done {
33804		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
33805		return
33806	}
33807	ar.Response = future.Response()
33808	return
33809}
33810
33811// VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
33812// operation.
33813type VpnSitesCreateOrUpdateFuture struct {
33814	azure.Future
33815}
33816
33817// Result returns the result of the asynchronous operation.
33818// If the operation has not completed it will return an error.
33819func (future *VpnSitesCreateOrUpdateFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
33820	var done bool
33821	done, err = future.DoneWithContext(context.Background(), client)
33822	if err != nil {
33823		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
33824		return
33825	}
33826	if !done {
33827		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
33828		return
33829	}
33830	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33831	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
33832		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
33833		if err != nil {
33834			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
33835		}
33836	}
33837	return
33838}
33839
33840// VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
33841// operation.
33842type VpnSitesDeleteFuture struct {
33843	azure.Future
33844}
33845
33846// Result returns the result of the asynchronous operation.
33847// If the operation has not completed it will return an error.
33848func (future *VpnSitesDeleteFuture) Result(client VpnSitesClient) (ar autorest.Response, err error) {
33849	var done bool
33850	done, err = future.DoneWithContext(context.Background(), client)
33851	if err != nil {
33852		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
33853		return
33854	}
33855	if !done {
33856		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
33857		return
33858	}
33859	ar.Response = future.Response()
33860	return
33861}
33862
33863// VpnSitesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
33864// operation.
33865type VpnSitesUpdateTagsFuture struct {
33866	azure.Future
33867}
33868
33869// Result returns the result of the asynchronous operation.
33870// If the operation has not completed it will return an error.
33871func (future *VpnSitesUpdateTagsFuture) Result(client VpnSitesClient) (vs VpnSite, err error) {
33872	var done bool
33873	done, err = future.DoneWithContext(context.Background(), client)
33874	if err != nil {
33875		err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
33876		return
33877	}
33878	if !done {
33879		err = azure.NewAsyncOpIncompleteError("network.VpnSitesUpdateTagsFuture")
33880		return
33881	}
33882	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
33883	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
33884		vs, err = client.UpdateTagsResponder(vs.Response.Response)
33885		if err != nil {
33886			err = autorest.NewErrorWithError(err, "network.VpnSitesUpdateTagsFuture", "Result", vs.Response.Response, "Failure responding to request")
33887		}
33888	}
33889	return
33890}
33891
33892// Watcher network watcher in a resource group.
33893type Watcher struct {
33894	autorest.Response `json:"-"`
33895	// Etag - A unique read-only string that changes whenever the resource is updated.
33896	Etag *string `json:"etag,omitempty"`
33897	// WatcherPropertiesFormat - Properties of the network watcher.
33898	*WatcherPropertiesFormat `json:"properties,omitempty"`
33899	// ID - Resource ID.
33900	ID *string `json:"id,omitempty"`
33901	// Name - READ-ONLY; Resource name.
33902	Name *string `json:"name,omitempty"`
33903	// Type - READ-ONLY; Resource type.
33904	Type *string `json:"type,omitempty"`
33905	// Location - Resource location.
33906	Location *string `json:"location,omitempty"`
33907	// Tags - Resource tags.
33908	Tags map[string]*string `json:"tags"`
33909}
33910
33911// MarshalJSON is the custom marshaler for Watcher.
33912func (w Watcher) MarshalJSON() ([]byte, error) {
33913	objectMap := make(map[string]interface{})
33914	if w.Etag != nil {
33915		objectMap["etag"] = w.Etag
33916	}
33917	if w.WatcherPropertiesFormat != nil {
33918		objectMap["properties"] = w.WatcherPropertiesFormat
33919	}
33920	if w.ID != nil {
33921		objectMap["id"] = w.ID
33922	}
33923	if w.Location != nil {
33924		objectMap["location"] = w.Location
33925	}
33926	if w.Tags != nil {
33927		objectMap["tags"] = w.Tags
33928	}
33929	return json.Marshal(objectMap)
33930}
33931
33932// UnmarshalJSON is the custom unmarshaler for Watcher struct.
33933func (w *Watcher) UnmarshalJSON(body []byte) error {
33934	var m map[string]*json.RawMessage
33935	err := json.Unmarshal(body, &m)
33936	if err != nil {
33937		return err
33938	}
33939	for k, v := range m {
33940		switch k {
33941		case "etag":
33942			if v != nil {
33943				var etag string
33944				err = json.Unmarshal(*v, &etag)
33945				if err != nil {
33946					return err
33947				}
33948				w.Etag = &etag
33949			}
33950		case "properties":
33951			if v != nil {
33952				var watcherPropertiesFormat WatcherPropertiesFormat
33953				err = json.Unmarshal(*v, &watcherPropertiesFormat)
33954				if err != nil {
33955					return err
33956				}
33957				w.WatcherPropertiesFormat = &watcherPropertiesFormat
33958			}
33959		case "id":
33960			if v != nil {
33961				var ID string
33962				err = json.Unmarshal(*v, &ID)
33963				if err != nil {
33964					return err
33965				}
33966				w.ID = &ID
33967			}
33968		case "name":
33969			if v != nil {
33970				var name string
33971				err = json.Unmarshal(*v, &name)
33972				if err != nil {
33973					return err
33974				}
33975				w.Name = &name
33976			}
33977		case "type":
33978			if v != nil {
33979				var typeVar string
33980				err = json.Unmarshal(*v, &typeVar)
33981				if err != nil {
33982					return err
33983				}
33984				w.Type = &typeVar
33985			}
33986		case "location":
33987			if v != nil {
33988				var location string
33989				err = json.Unmarshal(*v, &location)
33990				if err != nil {
33991					return err
33992				}
33993				w.Location = &location
33994			}
33995		case "tags":
33996			if v != nil {
33997				var tags map[string]*string
33998				err = json.Unmarshal(*v, &tags)
33999				if err != nil {
34000					return err
34001				}
34002				w.Tags = tags
34003			}
34004		}
34005	}
34006
34007	return nil
34008}
34009
34010// WatcherListResult response for ListNetworkWatchers API service call.
34011type WatcherListResult struct {
34012	autorest.Response `json:"-"`
34013	// Value - List of network watcher resources.
34014	Value *[]Watcher `json:"value,omitempty"`
34015}
34016
34017// WatcherPropertiesFormat the network watcher properties.
34018type WatcherPropertiesFormat struct {
34019	// ProvisioningState - The provisioning state of the network watcher resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34020	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34021}
34022
34023// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
34024// long-running operation.
34025type WatchersCheckConnectivityFuture struct {
34026	azure.Future
34027}
34028
34029// Result returns the result of the asynchronous operation.
34030// If the operation has not completed it will return an error.
34031func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
34032	var done bool
34033	done, err = future.DoneWithContext(context.Background(), client)
34034	if err != nil {
34035		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
34036		return
34037	}
34038	if !done {
34039		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
34040		return
34041	}
34042	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34043	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
34044		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
34045		if err != nil {
34046			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
34047		}
34048	}
34049	return
34050}
34051
34052// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
34053// operation.
34054type WatchersDeleteFuture struct {
34055	azure.Future
34056}
34057
34058// Result returns the result of the asynchronous operation.
34059// If the operation has not completed it will return an error.
34060func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
34061	var done bool
34062	done, err = future.DoneWithContext(context.Background(), client)
34063	if err != nil {
34064		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
34065		return
34066	}
34067	if !done {
34068		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
34069		return
34070	}
34071	ar.Response = future.Response()
34072	return
34073}
34074
34075// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
34076// long-running operation.
34077type WatchersGetAzureReachabilityReportFuture struct {
34078	azure.Future
34079}
34080
34081// Result returns the result of the asynchronous operation.
34082// If the operation has not completed it will return an error.
34083func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
34084	var done bool
34085	done, err = future.DoneWithContext(context.Background(), client)
34086	if err != nil {
34087		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
34088		return
34089	}
34090	if !done {
34091		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
34092		return
34093	}
34094	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34095	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
34096		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
34097		if err != nil {
34098			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
34099		}
34100	}
34101	return
34102}
34103
34104// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
34105// long-running operation.
34106type WatchersGetFlowLogStatusFuture struct {
34107	azure.Future
34108}
34109
34110// Result returns the result of the asynchronous operation.
34111// If the operation has not completed it will return an error.
34112func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
34113	var done bool
34114	done, err = future.DoneWithContext(context.Background(), client)
34115	if err != nil {
34116		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
34117		return
34118	}
34119	if !done {
34120		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
34121		return
34122	}
34123	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34124	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
34125		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
34126		if err != nil {
34127			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
34128		}
34129	}
34130	return
34131}
34132
34133// WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
34134// of a long-running operation.
34135type WatchersGetNetworkConfigurationDiagnosticFuture struct {
34136	azure.Future
34137}
34138
34139// Result returns the result of the asynchronous operation.
34140// If the operation has not completed it will return an error.
34141func (future *WatchersGetNetworkConfigurationDiagnosticFuture) Result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
34142	var done bool
34143	done, err = future.DoneWithContext(context.Background(), client)
34144	if err != nil {
34145		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
34146		return
34147	}
34148	if !done {
34149		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
34150		return
34151	}
34152	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34153	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
34154		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
34155		if err != nil {
34156			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
34157		}
34158	}
34159	return
34160}
34161
34162// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
34163// operation.
34164type WatchersGetNextHopFuture struct {
34165	azure.Future
34166}
34167
34168// Result returns the result of the asynchronous operation.
34169// If the operation has not completed it will return an error.
34170func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
34171	var done bool
34172	done, err = future.DoneWithContext(context.Background(), client)
34173	if err != nil {
34174		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
34175		return
34176	}
34177	if !done {
34178		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
34179		return
34180	}
34181	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34182	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
34183		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
34184		if err != nil {
34185			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
34186		}
34187	}
34188	return
34189}
34190
34191// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
34192// long-running operation.
34193type WatchersGetTroubleshootingFuture struct {
34194	azure.Future
34195}
34196
34197// Result returns the result of the asynchronous operation.
34198// If the operation has not completed it will return an error.
34199func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
34200	var done bool
34201	done, err = future.DoneWithContext(context.Background(), client)
34202	if err != nil {
34203		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
34204		return
34205	}
34206	if !done {
34207		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
34208		return
34209	}
34210	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34211	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
34212		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
34213		if err != nil {
34214			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
34215		}
34216	}
34217	return
34218}
34219
34220// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
34221// long-running operation.
34222type WatchersGetTroubleshootingResultFuture struct {
34223	azure.Future
34224}
34225
34226// Result returns the result of the asynchronous operation.
34227// If the operation has not completed it will return an error.
34228func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
34229	var done bool
34230	done, err = future.DoneWithContext(context.Background(), client)
34231	if err != nil {
34232		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
34233		return
34234	}
34235	if !done {
34236		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
34237		return
34238	}
34239	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34240	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
34241		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
34242		if err != nil {
34243			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
34244		}
34245	}
34246	return
34247}
34248
34249// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
34250// long-running operation.
34251type WatchersGetVMSecurityRulesFuture struct {
34252	azure.Future
34253}
34254
34255// Result returns the result of the asynchronous operation.
34256// If the operation has not completed it will return an error.
34257func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
34258	var done bool
34259	done, err = future.DoneWithContext(context.Background(), client)
34260	if err != nil {
34261		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
34262		return
34263	}
34264	if !done {
34265		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
34266		return
34267	}
34268	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34269	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
34270		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
34271		if err != nil {
34272			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
34273		}
34274	}
34275	return
34276}
34277
34278// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
34279// long-running operation.
34280type WatchersListAvailableProvidersFuture struct {
34281	azure.Future
34282}
34283
34284// Result returns the result of the asynchronous operation.
34285// If the operation has not completed it will return an error.
34286func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
34287	var done bool
34288	done, err = future.DoneWithContext(context.Background(), client)
34289	if err != nil {
34290		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
34291		return
34292	}
34293	if !done {
34294		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
34295		return
34296	}
34297	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34298	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
34299		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
34300		if err != nil {
34301			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
34302		}
34303	}
34304	return
34305}
34306
34307// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
34308// long-running operation.
34309type WatchersSetFlowLogConfigurationFuture struct {
34310	azure.Future
34311}
34312
34313// Result returns the result of the asynchronous operation.
34314// If the operation has not completed it will return an error.
34315func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
34316	var done bool
34317	done, err = future.DoneWithContext(context.Background(), client)
34318	if err != nil {
34319		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
34320		return
34321	}
34322	if !done {
34323		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
34324		return
34325	}
34326	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34327	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
34328		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
34329		if err != nil {
34330			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
34331		}
34332	}
34333	return
34334}
34335
34336// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
34337// operation.
34338type WatchersVerifyIPFlowFuture struct {
34339	azure.Future
34340}
34341
34342// Result returns the result of the asynchronous operation.
34343// If the operation has not completed it will return an error.
34344func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
34345	var done bool
34346	done, err = future.DoneWithContext(context.Background(), client)
34347	if err != nil {
34348		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
34349		return
34350	}
34351	if !done {
34352		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
34353		return
34354	}
34355	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
34356	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
34357		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
34358		if err != nil {
34359			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
34360		}
34361	}
34362	return
34363}
34364
34365// WebApplicationFirewallCustomRule defines contents of a web application rule.
34366type WebApplicationFirewallCustomRule struct {
34367	// Name - The name of the resource that is unique within a policy. This name can be used to access the resource.
34368	Name *string `json:"name,omitempty"`
34369	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
34370	Etag *string `json:"etag,omitempty"`
34371	// Priority - Describes priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.
34372	Priority *int32 `json:"priority,omitempty"`
34373	// RuleType - Describes type of rule. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
34374	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
34375	// MatchConditions - List of match conditions.
34376	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
34377	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
34378	Action WebApplicationFirewallAction `json:"action,omitempty"`
34379}
34380
34381// WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
34382// long-running operation.
34383type WebApplicationFirewallPoliciesDeleteFuture struct {
34384	azure.Future
34385}
34386
34387// Result returns the result of the asynchronous operation.
34388// If the operation has not completed it will return an error.
34389func (future *WebApplicationFirewallPoliciesDeleteFuture) Result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
34390	var done bool
34391	done, err = future.DoneWithContext(context.Background(), client)
34392	if err != nil {
34393		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
34394		return
34395	}
34396	if !done {
34397		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
34398		return
34399	}
34400	ar.Response = future.Response()
34401	return
34402}
34403
34404// WebApplicationFirewallPolicy defines web application firewall policy.
34405type WebApplicationFirewallPolicy struct {
34406	autorest.Response `json:"-"`
34407	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
34408	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
34409	// Etag - A unique read-only string that changes whenever the resource is updated.
34410	Etag *string `json:"etag,omitempty"`
34411	// ID - Resource ID.
34412	ID *string `json:"id,omitempty"`
34413	// Name - READ-ONLY; Resource name.
34414	Name *string `json:"name,omitempty"`
34415	// Type - READ-ONLY; Resource type.
34416	Type *string `json:"type,omitempty"`
34417	// Location - Resource location.
34418	Location *string `json:"location,omitempty"`
34419	// Tags - Resource tags.
34420	Tags map[string]*string `json:"tags"`
34421}
34422
34423// MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
34424func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
34425	objectMap := make(map[string]interface{})
34426	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
34427		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
34428	}
34429	if wafp.Etag != nil {
34430		objectMap["etag"] = wafp.Etag
34431	}
34432	if wafp.ID != nil {
34433		objectMap["id"] = wafp.ID
34434	}
34435	if wafp.Location != nil {
34436		objectMap["location"] = wafp.Location
34437	}
34438	if wafp.Tags != nil {
34439		objectMap["tags"] = wafp.Tags
34440	}
34441	return json.Marshal(objectMap)
34442}
34443
34444// UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
34445func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
34446	var m map[string]*json.RawMessage
34447	err := json.Unmarshal(body, &m)
34448	if err != nil {
34449		return err
34450	}
34451	for k, v := range m {
34452		switch k {
34453		case "properties":
34454			if v != nil {
34455				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
34456				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
34457				if err != nil {
34458					return err
34459				}
34460				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
34461			}
34462		case "etag":
34463			if v != nil {
34464				var etag string
34465				err = json.Unmarshal(*v, &etag)
34466				if err != nil {
34467					return err
34468				}
34469				wafp.Etag = &etag
34470			}
34471		case "id":
34472			if v != nil {
34473				var ID string
34474				err = json.Unmarshal(*v, &ID)
34475				if err != nil {
34476					return err
34477				}
34478				wafp.ID = &ID
34479			}
34480		case "name":
34481			if v != nil {
34482				var name string
34483				err = json.Unmarshal(*v, &name)
34484				if err != nil {
34485					return err
34486				}
34487				wafp.Name = &name
34488			}
34489		case "type":
34490			if v != nil {
34491				var typeVar string
34492				err = json.Unmarshal(*v, &typeVar)
34493				if err != nil {
34494					return err
34495				}
34496				wafp.Type = &typeVar
34497			}
34498		case "location":
34499			if v != nil {
34500				var location string
34501				err = json.Unmarshal(*v, &location)
34502				if err != nil {
34503					return err
34504				}
34505				wafp.Location = &location
34506			}
34507		case "tags":
34508			if v != nil {
34509				var tags map[string]*string
34510				err = json.Unmarshal(*v, &tags)
34511				if err != nil {
34512					return err
34513				}
34514				wafp.Tags = tags
34515			}
34516		}
34517	}
34518
34519	return nil
34520}
34521
34522// WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
34523// contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
34524type WebApplicationFirewallPolicyListResult struct {
34525	autorest.Response `json:"-"`
34526	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
34527	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
34528	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
34529	NextLink *string `json:"nextLink,omitempty"`
34530}
34531
34532// WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
34533// WebApplicationFirewallPolicy values.
34534type WebApplicationFirewallPolicyListResultIterator struct {
34535	i    int
34536	page WebApplicationFirewallPolicyListResultPage
34537}
34538
34539// NextWithContext advances to the next value.  If there was an error making
34540// the request the iterator does not advance and the error is returned.
34541func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
34542	if tracing.IsEnabled() {
34543		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
34544		defer func() {
34545			sc := -1
34546			if iter.Response().Response.Response != nil {
34547				sc = iter.Response().Response.Response.StatusCode
34548			}
34549			tracing.EndSpan(ctx, sc, err)
34550		}()
34551	}
34552	iter.i++
34553	if iter.i < len(iter.page.Values()) {
34554		return nil
34555	}
34556	err = iter.page.NextWithContext(ctx)
34557	if err != nil {
34558		iter.i--
34559		return err
34560	}
34561	iter.i = 0
34562	return nil
34563}
34564
34565// Next advances to the next value.  If there was an error making
34566// the request the iterator does not advance and the error is returned.
34567// Deprecated: Use NextWithContext() instead.
34568func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
34569	return iter.NextWithContext(context.Background())
34570}
34571
34572// NotDone returns true if the enumeration should be started or is not yet complete.
34573func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
34574	return iter.page.NotDone() && iter.i < len(iter.page.Values())
34575}
34576
34577// Response returns the raw server response from the last page request.
34578func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
34579	return iter.page.Response()
34580}
34581
34582// Value returns the current value or a zero-initialized value if the
34583// iterator has advanced beyond the end of the collection.
34584func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
34585	if !iter.page.NotDone() {
34586		return WebApplicationFirewallPolicy{}
34587	}
34588	return iter.page.Values()[iter.i]
34589}
34590
34591// Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
34592func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
34593	return WebApplicationFirewallPolicyListResultIterator{page: page}
34594}
34595
34596// IsEmpty returns true if the ListResult contains no values.
34597func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
34598	return wafplr.Value == nil || len(*wafplr.Value) == 0
34599}
34600
34601// webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
34602// It returns nil if no more results exist.
34603func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
34604	if wafplr.NextLink == nil || len(to.String(wafplr.NextLink)) < 1 {
34605		return nil, nil
34606	}
34607	return autorest.Prepare((&http.Request{}).WithContext(ctx),
34608		autorest.AsJSON(),
34609		autorest.AsGet(),
34610		autorest.WithBaseURL(to.String(wafplr.NextLink)))
34611}
34612
34613// WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
34614type WebApplicationFirewallPolicyListResultPage struct {
34615	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
34616	wafplr WebApplicationFirewallPolicyListResult
34617}
34618
34619// NextWithContext advances to the next page of values.  If there was an error making
34620// the request the page does not advance and the error is returned.
34621func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
34622	if tracing.IsEnabled() {
34623		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
34624		defer func() {
34625			sc := -1
34626			if page.Response().Response.Response != nil {
34627				sc = page.Response().Response.Response.StatusCode
34628			}
34629			tracing.EndSpan(ctx, sc, err)
34630		}()
34631	}
34632	next, err := page.fn(ctx, page.wafplr)
34633	if err != nil {
34634		return err
34635	}
34636	page.wafplr = next
34637	return nil
34638}
34639
34640// Next advances to the next page of values.  If there was an error making
34641// the request the page does not advance and the error is returned.
34642// Deprecated: Use NextWithContext() instead.
34643func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
34644	return page.NextWithContext(context.Background())
34645}
34646
34647// NotDone returns true if the page enumeration should be started or is not yet complete.
34648func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
34649	return !page.wafplr.IsEmpty()
34650}
34651
34652// Response returns the raw server response from the last page request.
34653func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
34654	return page.wafplr
34655}
34656
34657// Values returns the slice of values for the current page or nil if there are no values.
34658func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
34659	if page.wafplr.IsEmpty() {
34660		return nil
34661	}
34662	return *page.wafplr.Value
34663}
34664
34665// Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
34666func NewWebApplicationFirewallPolicyListResultPage(getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
34667	return WebApplicationFirewallPolicyListResultPage{fn: getNextPage}
34668}
34669
34670// WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties.
34671type WebApplicationFirewallPolicyPropertiesFormat struct {
34672	// PolicySettings - Describes policySettings for policy.
34673	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
34674	// CustomRules - Describes custom rules inside the policy.
34675	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
34676	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
34677	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
34678	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
34679	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
34680	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
34681	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
34682}
34683